Ruby on Rails 俄罗斯娃娃缓存

示例

您可能希望将缓存的片段嵌套在其他缓存的片段中。这称为Russian doll caching。

这样做的好处Russian doll caching是,如果更新单个产品,则在重新生成外部片段时可以重用所有其他内部片段。

如上一节中所述,如果updated_at缓存文件直接依赖的记录的更改值更改,则缓存文件将过期。但是,这不会使片段嵌套在其中的任何缓存失效。

例如,采用以下视图:

<% cache product do %>
  <%= renderproduct.games%>
<% end %>

依次呈现此视图:

<% cache game do %>
  <%= render game %>
<% end %>

如果更改了游戏的任何属性,则该updated_at值将设置为当前时间,从而使缓存过期。

但是,由于updated_at不会更改产品对象,因此该缓存不会过期,并且您的应用将提供过时的数据。为了解决这个问题,我们将模型与touch方法联系在一起:

class Product < ApplicationRecord
  has_many :games
end

class Game < ApplicationRecord
  belongs_to :product, touch: true
end