我是缓存中的新手,所以它可能很明显。
我想实现类似的目标:
未记录用户。他获得了缓存页面。
用户已登录。他获取普通页面,而不是缓存页面。
类似的东西(伪代码):
caches_action :index, :if => !current_user
不幸的是,这不起作用,但我猜你会这么想。
答案 0 :(得分:3)
由于页面缓存实际上保存了Web服务器直接获取的.html
文件,完全绕过Rails,因此无法使用此方法。
更好的方法可能是有条件地缓存页面内容。我通常实现一个包含视图cache_if
方法的cache
方法,并且可以采取一个条件:
def cache_if(condition, *options, &block)
if (!condition)
yield
else
cache(*options, &block)
end
end
使用时看起来像这样:
<% cache_if(!current_user, '#content') %>
...
<% end %>
答案 1 :(得分:0)
您可以在用户会话中看到Cache Sweeper。因此,基本上您可以将其设置为创建UserSession时使缓存页面到期。关于扫地机的链接Rails文档很棒。
答案 2 :(得分:0)
解决方案:
caches_action :index, :unless => :current_user