【问题标题】:Rails 4 fragment caching: view changes?Rails 4 片段缓存:视图更改?
【发布时间】:2014-12-23 08:25:33
【问题描述】:

在 Rails 4 项目中,假设我在视图中使用基于对象的片段缓存,如下所示:

<% cache(current_user) do %>
  <%= current_user.name %>
<% end %>

然后,每当current_user 更新时,current_user 缓存键就会更改。当缓存失效原因是对象本身发生了变化时,这对于使缓存失效非常有用。但是当视图发生变化时呢?例如,如果我更改视图代码以显示大写的用户名(而current_user 保持不变)怎么办?

<% cache(current_user) do %>
  <%= current_user.name.capitalize %>
<% end %>

似乎基于对象的片段缓存不会使缓存无效,即使视图应该更改。这是否意味着我必须定义基于视图版本进行版本化的缓存键,如下所示?

# some_helper.rb
def user_name_cache_key(user)
  [user, "v2"] # un-capitalized name was v1
end

# some_view.html.erb
<% cache(user_name_cache_key(current_user)) do %>
  <%= current_user.name.capitalize %>
<% end %>

也许这很明显,但在讨论 Rails 缓存的文档或博客文章中根本没有提及;他们似乎都专注于对象更新无效问题,而忽略了视图更新无效问题的技术。

谢谢!

【问题讨论】:

    标签: ruby-on-rails caching ruby-on-rails-4 view memcached


    【解决方案1】:

    好的,我刚刚发现 Cache Digests gem 会这样做并合并到 Rails 4 中:

    https://github.com/rails/cache_digests

    太棒了。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-07-18
      • 2015-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-07-02
      • 2019-12-23
      • 1970-01-01
      • 2012-10-22
      相关资源
      最近更新 更多