2014-10-28 45 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緩存的文檔或博客文章中並沒有提及;他們似乎都專注於對象更新失效問題,並忽略了視圖更新失效問題的技術。

謝謝!

回答