我有一个脱机的rake作业,可以更新我的模型。发生这种情况时,我想使该模型的:show操作失效。
# in lib/models/my_model.rb
after_update :expire_cache
def expire_cache
expire_action :controller => :my_models, :action => :show, :id => self
end
这不起作用,因为该模型中没有expire_action。调用ActionController.new.expire_action会给我带来很多奇怪的路由问题,这是合理的,因为没有任何路由逻辑被挂钩。
我认为expire_action的常见方式是使用清扫程序,但这是行不通的,因为我的模型没有通过控制器动作来更新。
注意:我觉得我可能使用了错误的缓存方式,因为在任何地方都找不到答案。
最佳答案
您正在寻找ActionController Sweeper。您可以找到有关如何实现它们的正式Rails文档here,但是您可能想要这样的东西:
class MyModelSweeper < ActionController::Caching::Sweeper
observe MyModel
def after_update(my_model)
expire_action :controller => :my_models, :action => :show, :id => my_model
end
end
关于ruby-on-rails - 来自模型的expire_action,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/9485801/