俄羅斯娃娃快取
你可能希望將快取的片段巢狀在其他快取的片段中。這叫做 Russian doll caching
。
Russian doll caching
的優點是,如果更新單個產品,則在重新生成外部片段時可以重用所有其他內部片段。
如上一節所述,如果 updated_at
的值更改為快取檔案直接依賴的記錄,則快取檔案將過期。但是,這不會使片段巢狀在其中的任何快取到期。
例如,採用以下檢視:
<% cache product do %>
<%= render product.games %>
<% end %>
這反過來呈現這種觀點:
<% cache game do %>
<%= render game %>
<% end %>
如果遊戲的任何屬性改變,則 updated_at
值將被設定為當前時間,從而使快取到期。
但是,由於產品物件不會更改 updated_at
,因此該快取不會過期,你的應用將提供陳舊資料。為了解決這個問題,我們將模型與觸控方法結合在一起:
class Product < ApplicationRecord
has_many :games
end
class Game < ApplicationRecord
belongs_to :product, touch: true
end