Question

Je cache d'action travailler sur mon index des sites, et mis en place un SiteSweeper qui fonctionne très 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

Mais je veux aussi expirer / admin / sites chaque fois les éditeurs sont enregistrés ou détruits. Est-il possible d'avoir un PublisherSweeper expire l'index des sites avec quelque chose comme ça?

# 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

Je sais que je peux appeler expire_action « / admin / sites » dans les différentes actions de l'éditeur. Je me demande si les balayeuses ont cette capacité (pour garder mes contrôleurs un peu plus propre).

Était-ce utile?

La solution

Une balayeuse peut observer de nombreux modèles, et un contrôleur peut avoir plusieurs balayeuses.

Je pense que vous devriez changer votre logique d'utiliser quelque chose comme ça:

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

PublishersController

  cache_sweeper :site_sweeper, :admin_sweeper

Alors vous ne répétez pas la logique de nettoyage de la / admin / site. Appelez-AdminSweeper, donc quand quelque chose va mal vous savez le seul endroit qui a expiré le « / admin / sites » action.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top