0

私はこのフラグメントをフラグメントキャッシュしています:

<% 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!などの他のすべての保存メソッドによっても呼び出されることを確認する必要があります。、など。これは本当ですか?

4

1 に答える 1

2

Sweeperを使用してオブジェクトを監視し、その中に更新時にフックを追加できます。そこでスイーパーについて読んでください。

于 2012-01-25T09:56:40.277 に答える