Обновление записи enum после истечения определенного периода времени по отношению к созданному - PullRequest
0 голосов
/ 22 февраля 2019

Цель: Обновить запись в моей модели заказов по истечении определенного периода времени, если запись еще не была обновлена.

Я нашел это SOpost: Обновление базы данных Rails по прошествии определенного времени

Я пытаюсь понять, как это могло бы помочь моей ситуации при обновлении записи.

Пояснение: это то, что есть в моей модели заказа:

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 --- но я хочу избежать этого драгоценного камнябез уважительной причины.

1 Ответ

0 голосов
/ 22 февраля 2019

Хотя это не очень хорошее решение, вы можете сделать это внутри обратного вызова, если хотите избежать работы 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...