Domanda

Ho azione caching lavorare sul mio indice siti, e impostare una SiteSweeper che funziona bene:

# 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

Ma voglio anche per scadere / admin / siti ogni volta che qualsiasi Publishers vengono salvati o distrutti. E 'possibile avere un PublisherSweeper scadenza l'indice Siti con qualcosa di simile?

# 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

So che posso chiamare expire_action '/ admin / siti' all'interno delle varie azioni Publisher. Mi chiedo solo se spazzatrici hanno questa capacità (per mantenere i miei controllori un po 'più pulito).

È stato utile?

Soluzione

Una spazzatrice possono osservare molti modelli, e qualsiasi controller può avere più spazzatrici.

Credo che si dovrebbe cambiare la logica di usare qualcosa di simile:

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

On PublishersController

  cache_sweeper :site_sweeper, :admin_sweeper

In modo da non ripetere la logica della pulizia del / admin / sito. Chiamatela AdminSweeper, in modo che quando qualcosa va storto si conosce il solo posto che è scaduto l'azione "/ admin / siti".

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top