在我的 rails 4 应用程序中,我尝试使用缓存,但由于缓存键设置、缓存帮助程序和自动过期的不同版本,我有点困惑。
所以让我通过几个例子来问这个问题。我不会故意将示例移至不同的问题,因为我觉得这样任何人都可以一眼就理解细微的差异。
1:侧边栏的最新用户
我想显示最新的用户。这对于应用程序中的所有用户当然是相同的,并显示在所有页面上。在 railscasts 我看到了一个类似的例子,它通过调用expire_fragment...
控制器而过期。但根据其他资源,这应该会在某些事情发生变化时自动过期(例如新用户注册)。所以我的问题是:我是否正确设置了密钥并且它会自动过期?
_sidebar.html.erb(显示在侧边栏的所有页面上)
<% cache 'latest-users' %>
<%= render 'users/user_sidebar' %>
<% end %>
_users_sidebar.html.erb
<% @profiles_sidebar.each do |profile| %>
<%= profile.full_name %>
........
<% end %>
2:产品展示页面
我想展示给定的产品(仅在展示页面上)。这对所有用户来说都是一样的,但是因为有更多的产品,所以有更多的版本。问题又是一样的:我是否正确设置了密钥,它会自动过期吗?
产品/show.html.erb
<% cache @product %>
<%= @product.name.upcase %>
<%= @product.user.full_name %>
<% end %>
3:产品/索引(用 will-paginate gem 分页)
在这里,我想一次缓存分页给定页面上的所有产品,因此产品被缓存在块中。这对所有用户也是一样的,并且只会显示在products index page
. (稍后我想russian-doll-caching
在此页面上为单个产品实施。)我的问题:我这样做是否正确,它会自动过期吗?
产品 index.html.erb
<% cache [@products, params[:page]] %>
<%= render @products %>
<% end %>
_product.html.erb
<%= product.name %>
<%= product.user.full_name %>
.....
我尝试使用的示例代码(不确定它是否好用):
首先是索引页,没有俄罗斯娃娃。
其次是带有评论的展示页面的俄罗斯娃娃。