使用delayed_job gem执行控制器方法

时间:2012-10-08 11:27:32

标签: ruby-on-rails ruby ruby-on-rails-3 delayed-job

我的控制器里面有一个方法,我需要在延迟作业方法中执行:

这是我的order controller action

class OrdersController < ApplicationController

 def create
  #code here
  order = Order.first
  Order.delay(queue: "order", priority: 1, run_at: 2.minutes.from_now).expire_order(order)
 end

 def template_expired_order(order)
  #code here
 end

end

这是我的order model:

class Order
  include Mongoid::Document
  include Mongoid::Timestamps::Created
  .
  .
  .
  #delayed jobs method
  def self.expire_order(order)
   #code here
  end
end

我想在执行或触发或启动template_expired_order(order)方法时执行控制器方法self.expire_order(order)

我该怎么做?

非常感谢!

1 个答案:

答案 0 :(得分:1)

您不应将与模型相关的代码放在控制器中,尤其是如果您想在后台作业中运行它。目前尚不清楚template_expired_order的作用,但我建议将其放入Order模型中,并直接按照传递给expired_order的顺序调用它。

class Order
  def expire_order(order)
    order.template_expired_order
  end

  def template_expired_order
    # code
  end
end