Rails扫地机可以在不同的控制器上工作吗?

时间:2010-12-22 02:20:29

标签: ruby-on-rails caching sweeper

我在我的网站索引上有动作缓存,并设置一个工作正常的SiteSweeper:

# 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

但是,无论何时保存或销毁任何发布者,我都希望过期/管理/网站。是否有可能让PublisherSweeper使用类似的东西使网站索引到期?

# 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

我知道我可以在各种Publisher动作中调用expire_action'/ admin / sites'。我只是想知道扫地机是否具备此功能(以保持我的控制器更清洁)。

1 个答案:

答案 0 :(得分:5)

一个扫地机可以观察到许多型号,任何控制器都可以有多个扫地机。

我认为你应该改变你的逻辑来使用类似的东西:

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

On PublishersController

  cache_sweeper :site_sweeper, :admin_sweeper

所以你不要重复清理/ admin / site的逻辑。称之为AdminSweeper,因此当出现问题时,您知道唯一一个过期“/ admin / sites”操作的地方。