Rails仅为访客用户发送缓存页面

时间:2011-10-28 15:17:07

标签: ruby-on-rails ruby caching

我是缓存中的新手,所以它可能很明显。

我想实现类似的目标:

  1. 未记录用户。他获得了缓存页面。

  2. 用户已登录。他获取普通页面,而不是缓存页面。

  3. 类似的东西(伪代码):

    caches_action :index, :if => !current_user

    不幸的是,这不起作用,但我猜你会这么想。

3 个答案:

答案 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