Ruby on Rails更新数据库字段迁移

时间:2018-05-18 11:45:44

标签: ruby-on-rails ruby migration

我尝试使用其他字段中的值更新列的所有字段。只有当我尝试+ 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 :(得分:2)

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
相关问题