如果条件带有delayed_job,则运行hook

时间:2013-01-14 17:53:33

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

我的控制器上有这个职位:

def action1
 #code here
  order = Order.find(params[:id])
  Delayed::Job.enqueue(ExpiredMessage.new(order), 2, 2.days.from_now)
 #code here
end

我在myapp/app/jobs里面有一个名为expired_message.rb的文件中的自定义作业,其中包含下一个内容:

class ExpiredMessage < Struct.new(:order)
 def perform
  #code to run here for example order.save
   order.any_method
 end
end

我只想在perform method if order.status == "PA"

内执行代码

如何在保存订单之前运行挂钩以检查我的自定义作业上的if order.status == "PA"

否则,如果order.status!=“PA”,我想在执行此作业之前删除作业。

非常感谢!

1 个答案:

答案 0 :(得分:1)

如果要从数据库中检查对象的状态 - 请在其上调用reload。否则,只需像检查其他任何对象一样检查它:

def perform
  order.any_method if order.reload.status == "PA"
end