質問

私のサイトインデックスで動作するアクションキャッシュがあり、正常に動作する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」アクションが期限切れになった唯一の場所を知っています。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top