will_paginate动作和片段缓存的问题

时间:2011-01-05 05:40:56

标签: ruby-on-rails

我已将操作缓存添加到索引部分并在页面中列出9条记录

will_paginate dosent工作,并一次又一次地呈现相同的一组记录。

片段缓存

相同的问题

请为此提出一些解决方案..

感谢

2 个答案:

答案 0 :(得分:2)

答案 1 :(得分:0)

除非你有一个非常基本的Rails应用程序,否则我建议使用片段缓存,因为与动作/页面缓存相比,它更容易使用和维护。如果您决定使用片段缓存,则可以在索引模板中添加以下内容:

<% @models.each do |model| %>
  <% cache ["v1", model] do %>
    <%= render model %>
  <% end %>
<% end %>

这将呈现部分_model.html.erb并缓存结果。有关Rails中缓存机制的详细信息,建议您阅读Rails Guides

更积极的缓存策略是将所有模型缓存在单个页面上。这可以通过将当前页面设置为控制器中的实例变量来完成:

def index
  @page   = params[:page]
  @models = ...
end

现在,您可以在模板中将页面包含在复合缓存键中:

<% cache ["v1", cache_key_for(@models), @page] do %>
  <% @models.each do |model| %>
    <%= render model %>
  <% end %>
<% end %>

<% end %>

cache_key_for是一个帮助程序,它为一组模型计算缓存键。它可以定义为:

def cache_key_for(models)
  "#{models.count}-{models.map(&:updated_at).max.utc.to_s(:number)}"
end