俄羅斯娃娃快取

你可能希望將快取的片段巢狀在其他快取的片段中。這叫做 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