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).

¿Fue útil?

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.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top