扫地机可以在不同的控制器上工作吗?
-
12-10-2019 - |
题
我有操作缓存在我的网站索引上工作,并设置了一个井井有条的网站扫描仪:
# 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”操作中到期的地方。
不隶属于 StackOverflow