【发布时间】:2013-01-15 02:05:34
【问题描述】:
我的控制器上有这个工作:
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" 我想在该作业执行之前删除该作业。
非常感谢!
【问题讨论】:
-
有什么原因不能在加入队列之前检查它吗?
-
是的,原因是订单状态可以在2.minutes或2.days...等时间内更改为其他状态
-
其他进程如何访问这个订单对象来修改它?还是您的意思是在数据库中更改?如果是,那么“保存”它的目的是什么——它已经存在了!
-
Order.save 是代码示例。如果导致混淆,我已经更改了代码。创建新订单后,我想在 2 天后运行
order.any_method,但只在我的数据库上运行if order.status == "PA"。如果创建订单后order.status与"PA"不同。我不想要order.any_method。不知道我解释的对不对 -
那么一个简单的
if条件和数据库重新加载就足够了 - 请参阅下面的答案。
标签: ruby-on-rails ruby ruby-on-rails-3 ruby-on-rails-3.1 delayed-job