我已将操作缓存添加到索引部分并在页面中列出9条记录
will_paginate dosent工作,并一次又一次地呈现相同的一组记录。
与片段缓存
相同的问题请为此提出一些解决方案..
感谢
答案 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