Обновление поля базы данных обновления Ruby on Rails - PullRequest
0 голосов
/ 18 мая 2018

Я пытаюсь обновить все поля столбца значением из другого поля.Только когда я пытаюсь + 1 день, я получаю сообщение об ошибке.

Workdate - это поле, которое должно иметь новое значение.

Internal_delivery_date - это столбец, из которого получено значение.

class UpdateWorkdate < ActiveRecord::Migration[5.0]
  def self.up
    Order.update_all(workdate: internal_delivery_date + 1.day)
  end
end

Как я могу сделать это без получения ошибки?

1 Ответ

0 голосов
/ 18 мая 2018

Rails делает много глупой магии, но все это заканчивается тем, что выполняется простой старый добрый SQL для базы данных.Любое воображение ActiveRecord::Base#update_all - это не что иное, как переводчик строки SQL.Вместо того, чтобы пытаться выяснить, как обойти все ловушки и глюки Rails, я всегда предлагаю использовать кувалду, которая никогда не предаст: напишите SQL, и все готово.

class UpdateWorkdate < ActiveRecord::Migration[5.0]
  def self.up
    Order.connection.execute("
      UPDATE orders
      SET workdate = internal_delivery_date + INTERVAL 1 DAY")
  end
end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...