我有列出所有活动的页面。但是事件列表取决于用户是否是管理员。 如果我在浏览模型对象的页面上使用片段缓存,它将缓存管理员的所有事件。
是否可以从缓存向其他非管理员用户提供服务?如果是,我如何为非管理员和管理员用户使用片段缓存。
答案 0 :(得分:4)
使用片段缓存键执行以下操作:
<% cache [current_user.role, :events] do %>
<b>All the Events based on the Current User's Role</b>
<%= render events %>
<% end %>
http://api.rubyonrails.org/classes/ActionView/Helpers/CacheHelper.html#method-i-cache
您可以在缓存方法的name
参数中传递任意数量的项目,以便根据您的情况来缓存缓存。
答案 1 :(得分:2)
你可能想做这样的事情:
<%= cache_unless admin?, project do %>
<b>All the topics on this project</b>
<%= render project.topics %>
<% end %>
从Rails文档解除的示例: http://api.rubyonrails.org/classes/ActionView/Helpers/CacheHelper.html#method-i-cache_unless
答案 2 :(得分:1)
在您的控制器中:
class ApplicationController < ActionController::Base
fragment_cache_key do
current_user.role
end
#...
这将由Rails的片段缓存使用,并在构造缓存键时添加到fragment_cache_keys
列表中。因此,只要您使用任何Rails的片段缓存,您就可以自动为每个用户角色获取唯一的缓存键(或使用您喜欢的任何内容)。