Ruby on rails 如果作业延迟,则运行钩子

Ruby on rails 如果作业延迟,则运行钩子,ruby-on-rails,ruby,ruby-on-rails-3,ruby-on-rails-3.1,delayed-job,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 我在名为expired\u message.rb的文件中有一个名为myapp/app/jobs的自定义作业,其中包含以下内容: class ExpiredMessage < Str

我的控制器上有此作业:

def action1
 #code here
  order = Order.find(params[:id])
  Delayed::Job.enqueue(ExpiredMessage.new(order), 2, 2.days.from_now)
 #code here
end
我在名为
expired\u message.rb的文件中有一个名为
myapp/app/jobs
的自定义作业,其中包含以下内容:

class ExpiredMessage < Struct.new(:order)
 def perform
  #code to run here for example order.save
   order.any_method
 end
end
class ExpiredMessage
如果order.status==“PA”

如何在保存订单之前运行钩子,以便在自定义作业上检查订单状态==“PA”

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


多谢各位

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

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

是否存在无法在将订单添加到队列之前进行检查的原因?是的,原因是订单状态可以在2.5分钟或2.5天内更改为其他状态…其他进程如何访问此订单对象以对其进行修改?或者你的意思是改变了数据库?如果是这样,“保存”它的目的是什么?它已经存在了!Order.save是一个代码示例。如果导致混淆,我已更改代码。创建新订单后,我希望在2天后运行
order.any_方法,但仅当order.status==“PA”
在我的数据库上运行时才运行。如果在创建订单后,
order.status
“PA”
不同。我不想要
订单。任何方法。我不知道我是否已经正确地解释了,那么一个简单的<代码>如果条件和db重载应该足够了-见下面我的答案。非常感谢。你的回答是正确的。问题出在重新加载db:D上。谢谢!