2014-10-28 79 views
1

在Rails 4项目,比方说我使用基于对象的片段缓存在视图中,类似这样的: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缓存的文档或博客文章中并没有提及;他们似乎都专注于对象更新失效问题,并忽略了视图更新失效问题的技术。

谢谢!

回答