我有操作缓存在我的网站索引上工作,并设置了一个井井有条的网站扫描仪:

# 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

但是,每当保存或销毁任何发布者时,我也希望过期 /管理 /站点。是否有可能让出版商的网站索引有类似的内容?

# 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

我知道我可以在各种发布者操作中调用expire_action'/admin/sites'。我只是想知道扫地机是否具有此功能(以使我的控制器保持更干净)。

有帮助吗?

解决方案

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

我认为您应该更改逻辑以使用类似的东西:

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

在PublishersController上

  cache_sweeper :site_sweeper, :admin_sweeper

因此,您不会重复清洁 /admin /站点的逻辑。称其为管理员,因此当出现问题时,您知道唯一一个在“/admin/sites”操作中到期的地方。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top