2014-10-29 17 views
0

我有這樣的緩存Rails的片段緩存不獲取最新

<% cache [obj.id, obj.updated_at] do %> 
    <%= render obj %> 
<% end %> 

_obj.html.erb

<% cache ["obj/#{obj.id}/logic", obj.updated_at] do %> 
some logic 
<% end %> 
<% cache [obj.parent.id, obj.parent.updated_at] do %> 
parent's logic logic 
<% end %> 

當只有父母的數據改變,我仍然得到同樣的緩存像之前一樣。的updated_at改變只有當OBJ的,內部緩存得到更新..

這是正確的行爲?不應該將高速緩存中的高速緩存部分獨立處理?或者當我觸摸obj.parent時,是否需要觸摸obj?

+0

你on Rails的4+? – rossta 2014-10-29 12:35:15

+0

是的,我在軌4.1.6 – 2014-10-29 12:41:01

+0

嘗試使用'<%緩存OBJ%>'和'<%緩存obj.parent%>'來代替。假設'obj'和'obj.parent'是實例(或表現得像)ActiveRecord的 - 這意味着他們從'id'和'updated_at'計算的'cache_key'方法應對 - 那麼「俄羅斯套娃」高速緩存期滿應該工作。 – rossta 2014-10-29 12:47:29

回答

0

爲在上述評論說,這是你應該緩存的片段(russian doll pattern)的方式。但是,它看起來像是根據兩個對象緩存一段內容,因此它應該只是<% cache [obj, obj.parent] %>。你不需要在這裏緩存兩次,因爲它沒有效果。

EDIT2:

<% cache [obj, obj.parent] do %> 
    <%= render obj %> 
<% end %> 
+0

真實的,但要注意,部分內我有其他緩存以及 – 2014-10-29 13:39:49

+0

我可以在你的片段看,你只緩存的緩存的緩存「,僅此而已。 '%cache [obj,obj.parent]%>'完全一樣。 – blelump 2014-10-29 13:41:38