Ryan Bates'render-caching gem很不错,但它按request_uri
s键入缓存条目:
def render_with_cache(key = nil, options = nil)
key ||= request.request_uri # <----
body = Rails.cache.read(key)
if body
render :text => body
else
yield if block_given?
render unless performed?
Rails.cache.write(key, response.body, options)
end
end
这是一个不完整的解决方案,因为我的应用程序为给定URI呈现的内容因以下原因而异:
如何修改此方法,将当前用户和请求格式考虑在内?
答案 0 :(得分:1)
该方法接受key
参数,因此您无需破解它。只需将缓存名称作为参数传递。
render_with_cache([current_user.id, request.format, request.uri].join("/")) do
# ...
end
如果您经常发现自己使用此参数调用方法,请创建一个包含前一个方法的新方法。
def render_with_cache_scoped_by_user(key = nil, options = nil, &block)
scoped_key = [current_user.id, request.format, request.uri]
scoped_key << key unless key.blank?
render_with_cache(scoped_key.join("/"), options, &block)
end