我正在片段缓存这个片段:
<% 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*,保存!等。是这样吗?