缓存清扫器是一个观察者,在它所观察的模型上带有一些钩子:
class MySweeper < ActionController::Caching::Sweeper
observe MyModel
def after_update(my_model)
expire_page(...)
end
end
但是文档和指南也说要在控制器中声明清扫器:
class ApplicationController < ActionController::Base
cache_sweeper :my_sweeper
end
为什么是这样?观察者的重点不是观察模型并采取行动吗?控制器不应该不必知道缓存何时到期或导致它的原因吗?
澄清
我对将清扫器设置为观察者的理解是,这意味着“在所有情况下,当更新 MyModel 时,运行此清理代码”
- 那准确吗?
- 如果是这样,那为什么
cache_sweeper :my_sweeper
还需要在控制器中声明呢?那有什么作用?