您可能希望将缓存的片段嵌套在其他缓存的片段中。这称为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