我尝试使用其他字段中的值更新列的所有字段。只有当我尝试+ 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
如何在不收到错误的情况下执行此操作?
答案 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