2012-02-28 2 views
3

モデルを更新するオフラインレーキジョブがあります。それが起こると、そのモデルのshowアクションを期限切れにしたい。expire_action from model

# in lib/models/my_model.rb 
after_update :expire_cache 
def expire_cache 
    expire_action :controller => :my_models, :action => :show, :id => self 
end 

expire_actionがモデルで使用できないため、これは機能しません。 ActionController.new.expire_actionを呼び出すと、奇妙なルートの問題が多く発生します。これは、ルートロジックが一切結び付けられていないので妥当です。

私はexpire_actionの一般的な方法はスイーパーであると思いますが、私のモデルはコントローラのアクションによって更新されないため動作しません。

注:私はどこにでも答えを見つけることができないので、間違った方法でキャッシュを使用しているような気がします。

答えて

1

あなたはActionController Sweeperを探しています。あなたは彼らにhereを実装する方法の公式Railsのドキュメントを見つけることができますが、おそらくあなたは、このような何かをしたい:

class MyModelSweeper < ActionController::Caching::Sweeper 
    observe MyModel 

    def after_update(my_model) 
    expire_action :controller => :my_models, :action => :show, :id => my_model 
    end 

end 
+0

モデルではないので、私の理解では、コントローラのアクションにスイーパーフックであり、これは動作しないでしょうアクションの一部として更新されました。それは本当ですか? – phillee

+0

掃除機はモデルを観察するだけでなく、コントローラにも接続されています(たとえば、ページを期限切れにすることができます)。 '' 'MyModel'''を実行することで、スイーパはモデルの変更を監視し、その変更に基づいてページを期限切れにすることができます。 – Veraticus

+0

したがって、レールサーバーが稼動している場合、別のオフラインレーキタスクによって行われたモデルの変更を検出しますか? – phillee