私はこのフラグメントをフラグメントキャッシュしています:
<% cache('fragment-id') do %>
<div id="fragment-id">
<%= render @object %>
</div>
<% end %>
さて、明らかに、オブジェクトが更新されるたびにそのキャッシュを期限切れにする必要があります(dbの観点から言えば)。
だから私はこの行を置くことになっています:
expire_fragment('fragment-id')
...コントローラ間であちこちで、アクションがオブジェクトを更新(または保存)するたびに。
しかし、更新(または保存)のたびにexpire_fragmentコマンドをトリガーするオブジェクトモデル(/app/models/object.rb)に何らかのフックを書き込むなど、これを行うDRYerの方法があるかどうか疑問に思っています。
出来ますか?
編集#1:
たぶん私は次のようにオブジェクトモデルのsaveメソッドを上書きすることができます:
def save
expire_fragment('fragment-id')
super
end
ただし、これが正しく機能するためには、「save」メソッドが* update_attributes *、save!などの他のすべての保存メソッドによっても呼び出されることを確認する必要があります。、など。これは本当ですか?