Rails Sweepersはさまざまなコントローラーで動作できますか?
-
12-10-2019 - |
質問
私のサイトインデックスで動作するアクションキャッシュがあり、正常に動作するSitesweeperを設定します。
# app/controllers/admin/sites_controller.rb
class Admin::SitesController < Admin::BaseController
cache_sweeper :site_sweeper, :only => [:create, :update, :destroy]
caches_action :index, :cache_path => '/admin/sites'
...
# app/sweepers/site_sweeper.rb
class SiteSweeper < ActionController::Caching::Sweeper
observe Site
def after_save(site)
expire_cache(site)
end
def after_destroy(site)
expire_cache(site)
end
def expire_cache(site)
expire_action '/admin/sites'
end
end
しかし、出版社が保存または破壊されるたびに、私は有効期限 /管理者 /サイトを望んでいます。 PublisherSweeperにこのようなものでサイトインデックスを期限切れさせることは可能ですか?
# app/sweepers/publisher_sweeper.rb
class PublisherSweeper < ActionController::Caching::Sweeper
observe Publisher
def after_save(publisher)
expire_cache(publisher)
end
def after_destroy(publisher)
expire_cache(publisher)
end
def expire_cache(publisher)
expire_action '/admin/sites'
end
end
さまざまなパブリッシャーアクション内で、expire_action '/admin/sites'を呼び出すことができることを知っています。スイーパーがこの機能を持っているかどうか疑問に思っています(コントローラーを少しきれいに保つため)。
解決
1つのスイーパーは多くのモデルを観察でき、どのコントローラーも複数のスイーパーを持つことができます。
そのようなものを使用するには、ロジックを変更する必要があると思います。
class SiteSweeper < ActionController::Caching::Sweeper
observe Site, Publisher
(…)
end
PublishersControllerで
cache_sweeper :site_sweeper, :admin_sweeper
したがって、 /admin /サイトのクリーニングのロジックを繰り返さないでください。 Adminsweeperと呼ぶので、何かがうまくいかない場合は、「/admin/Sites」アクションが期限切れになった唯一の場所を知っています。
所属していません StackOverflow