来自模型的expire_action

时间:2012-02-28 16:30:09

标签: ruby-on-rails ruby-on-rails-3 caching

我有一个离线佣金工作,可以更新我的模型。当发生这种情况时,我想使该模型的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的常用方法是使用清扫程序,但这不起作用,因为我的模型没有通过控制器操作进行更新。

注意:我觉得我可能正在以错误的方式使用缓存,因为我无法在任何地方找到答案。

1 个答案:

答案 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