在相对于created_at的特定时间范围过去之后更新枚举记录

时间:2019-02-22 07:54:19

标签: ruby-on-rails ruby

目标:如果尚未更新特定时间范围,则在订单模型中更新记录。

我发现了这样的帖子: 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记录更改为3cancelled(是的,它的拼写错误)-但记录不是还没有23,或者仅当它当前位于1时。

我确实看到有这个宝石:https://github.com/javan/whenever ---但我确实想避免没有充分的理由拥有这个宝石。

1 个答案:

答案 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