Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 从模型中终止\u操作_Ruby On Rails_Ruby On Rails 3_Caching - Fatal编程技术网

Ruby on rails 从模型中终止\u操作

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

我有一个离线的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.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的服务器上运行该任务,以便它能够正确地访问相同的缓存。