Frage

Ich habe Aktion Caching auf meinen Seiten Index zu arbeiten, und eine SiteSweeper eingerichtet, die gut funktioniert:

# 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

Aber ich möchte auch verfallen / admin / sites, wenn alle Publishers gespeichert werden oder zerstört werden. Ist es möglich, ein PublisherSweeper den Seiten Index mit so etwas haben ablaufen?

# 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

Ich weiß, ich kann einfach anrufen expire_action ‚/ admin / Sites‘ innerhalb der verschiedenen Publisher Aktionen. Ich frage mich nur, wenn Kehrmaschinen diese Fähigkeit haben (meine Controller ein wenig sauberer zu halten).

War es hilfreich?

Lösung

Man kann Kehrmaschine viele Modelle beobachten, und jeder Controller mehrere Kehrmaschinen haben kann.

Ich glaube, Sie Ihre Logik, so zu nutzen, um etwas ändern sollte:

class SiteSweeper < ActionController::Caching::Sweeper
  observe Site, Publisher
  (…)
end

Auf PublishersController

  cache_sweeper :site_sweeper, :admin_sweeper

Sie brauchen also nicht wiederholen Sie die Logik der Reinigung der / admin / site. Nennen Sie es AdminSweeper, so dass, wenn etwas schief geht, wissen Sie, die nur an einer Stelle, die die „/ admin / sites“ Aktion abgelaufen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top