目标:如果尚未更新特定时间范围,则在订单模型中更新记录。
我发现了这样的帖子: Rails update database after certain amount of time has gone by
我正在努力了解这将如何帮助我更新记录。
澄清一下,这就是我的订单模型中的内容:
enum order_status: {created: 1, charged: 2, cancelled: 3 }
我正在我的订单模型中考虑这样的代码:
def cancel_orders
if Order.where(order_status: [1] && "created_at < (Date.now - 7)").update_all(order_status: [3]
end
虽然,我对如何应用此方法并不满意?
然后我创建了这个:
scope :cancel_orders, -> { (Order.where(order_status: [1] && "created_at < (Date.now - 7)").update_all(order_status: [3]) }
尽管,所有记录均未更新。
我想要的是经过7天后将order_status
记录更改为3
或cancelled
(是的,它的拼写错误)-但记录不是还没有2
或3
,或者仅当它当前位于1
时。
我确实看到有这个宝石:https://github.com/javan/whenever ---但我确实想避免没有充分的理由拥有这个宝石。
答案 0 :(得分:0)
尽管这不是一个好的解决方案,但是如果您想避免执行cron作业,则可以在回调内部完成:
class Order
before_create :cancel_orders
private
def cancel_orders
self.class.where("order_status = 1 AND created_at < ?", DateTime.now - 7.days).update_all(order_status: 3)
end
end