【发布时间】:2011-01-05 05:40:56
【问题描述】:
我已将 动作缓存 添加到我的 index 部分并在页面中列出 9 条记录
will_paginate dosent 工作,并一次又一次地呈现相同的记录集。
片段缓存
也有同样的问题请为此提出一些解决方案..
谢谢
【问题讨论】:
标签: ruby-on-rails
我已将 动作缓存 添加到我的 index 部分并在页面中列出 9 条记录
will_paginate dosent 工作,并一次又一次地呈现相同的记录集。
片段缓存
也有同样的问题请为此提出一些解决方案..
谢谢
【问题讨论】:
标签: ruby-on-rails
除非您有一个非常基本的 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
【讨论】: