Ruby on rails 从模型中终止\u操作
我有一个离线的rake作业来更新我的模型。发生这种情况时,我想终止该模型的:show操作Ruby on rails 从模型中终止\u操作,ruby-on-rails,ruby-on-rails-3,caching,Ruby On Rails,Ruby On Rails 3,Caching,我有一个离线的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\u操作在模型中不可用。调用ActionController.n
# in lib/models/my_model.rb
after_update :expire_cache
def expire_cache
expire_action :controller => :my_models, :action => :show, :id => self
end
这不起作用,因为expire\u操作在模型中不可用。调用ActionController.new.expire\u操作会给我带来很多奇怪的路由问题,这是合理的,因为没有连接任何路由逻辑
我认为终止_操作的常见方法是使用清理器,但这不起作用,因为我的模型没有通过控制器操作更新
注意:我觉得我可能使用了错误的缓存方式,因为我在任何地方都找不到这个问题的答案 您正在寻找一个合适的人选。您可以找到关于如何实现它们的官方Rails文档,但您可能需要以下内容:
class MyModelSweeper < ActionController::Caching::Sweeper
observe MyModel
def after_update(my_model)
expire_action :controller => :my_models, :action => :show, :id => my_model
end
end
class MyModelSweeper:我的\模型,:操作=>:显示,:id=>我的\模型
结束
结束
我的理解是,清扫器钩住了一个控制器动作,这不起作用,因为模型没有作为动作的一部分进行更新。这不是真的吗?清扫者观察模型,但也连接到控制器(例如,允许您使页面过期)。通过执行observemymodel
清理程序将监视模型上的更改,然后可以基于这些更改终止页面,所有更改都在响应堆栈之外。因此,如果rails服务器正在运行,它将检测到由单独的脱机rake任务在模型中完成的更改?否,rake任务将自行执行更改。因此,您需要在运行Rails的服务器上运行该任务,以便它能够正确地访问相同的缓存。