Can Rails Kehrmaschinen arbeiten in den verschiedenen Steuerungen?
-
12-10-2019 - |
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).
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.