如何使对象更新的对象索引的片段缓存失效

时间:2012-01-25 09:41:31

标签: ruby-on-rails ruby-on-rails-3 caching ruby-on-rails-3.1 fragment-caching

我正在片段缓存这个片段:

<% cache('fragment-id') do %>
    <div id="fragment-id">
        <%= render @object %>
    </div> 
<% end %> 

现在,显然,每次更新对象时我都需要使缓存失效(从db角度讲)。

所以我应该把这一行:

expire_fragment('fragment-id') 
每次操作更新(或保存对象时,

...控制器之间的所有位置。

但我想知道是否有 DRYer方式来做这件事,比如在对象模型(/ app / models / object)中编写某种钩子。 rb)在每次更新(或保存)时触发expire_fragment命令。

有可能吗?

编辑#1:

也许我可以像这样覆盖对象模型中的save方法:

def save
    expire_fragment('fragment-id')
    super
end

但是,为了使其正常工作,我必须确保“保存”方法也被所有调用其他保存方法,如* update_attributes *, save!<这是真的吗?

1 个答案:

答案 0 :(得分:2)

您可以使用Sweeper观察您的对象,并在其中添加更新时的挂钩。了解清扫工there