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