El trabajo puede rieles barrenderos a través de diferentes controladores?
-
12-10-2019 - |
Pregunta
Tengo el almacenamiento en caché de acción trabajando en mi índice de Sitios, y establecer un SiteSweeper que funciona bien:
# 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
Pero también quiero a punto de expirar / admin / sitios cada vez que cualquier Editores se guardan o se destruye. ¿Es posible tener una PublisherSweeper expire el índice de sitios con algo como esto?
# 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
Sé que sólo puedo llamar expire_action '/ admin / sites' dentro de las diversas acciones de Publisher. Me pregunto si barrenderos tienen esta capacidad (para mantener mis controladores de un poco más limpia).
Solución
Una barredora puede observar muchos modelos, y cualquier controlador puede tener múltiples barredoras.
Creo que debería cambiar su lógica para su uso algo así:
class SiteSweeper < ActionController::Caching::Sweeper
observe Site, Publisher
(…)
end
En PublishersController
cache_sweeper :site_sweeper, :admin_sweeper
Así que no repita la lógica de la limpieza de la / admin / sitio. AdminSweeper llamarlo, así que cuando algo va mal sabes el único lugar que expiró el "admin / sitios / la" acción.