0

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

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

现在,显然,每次更新对象时我都需要使缓存过期(从数据库的角度来看)。

所以我应该把这条线:

expire_fragment('fragment-id') 

...在控制器中的各处,每次操作更新(或保存对象时。

但我想知道是否有一种DRYer 方法可以做到这一点,比如在对象模型(/app/models/object.rb)中编写某种钩子,它会在每次更新(或保存)时触发 expire_fragment 命令。

可能吗?

编辑#1:

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

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

但是,为了使其正常工作,我必须确保所有其他保存方法也调用“保存”方法,例如 *update_attributes*,保存!等。是这样吗?

4

1 回答 1

2

您可以使用 Sweeper 观察您的对象,并在其中添加更新挂钩。阅读那里的清扫车。

于 2012-01-25T09:56:40.277 回答