我有一个离线佣金工作,可以更新我的模型。当发生这种情况时,我想使该模型的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的常用方法是使用清扫程序,但这不起作用,因为我的模型没有通过控制器操作进行更新。
注意:我觉得我可能正在以错误的方式使用缓存,因为我无法在任何地方找到答案。
答案 0 :(得分:1)
您正在寻找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