F. LK
F. LK

Reputation: 75

Ruby on Rails update database field migration

I try to update all fields of a column with a value from another field. Only when I try + 1 day I get an error.

Workdate is the field that needs to have the new value.

Internal_delivery_date is the column from which the value is derived.

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

How can I do this without getting an error?

Upvotes: 1

Views: 58

Answers (1)

Aleksei Matiushkin
Aleksei Matiushkin

Reputation: 121010

Rails do a lot of silly magic, but it all ends up executing plain old good SQL against the database. Any fancy ActiveRecord::Base#update_all is nothing but a translator to a SQL string. Instead of trying to figure out how to bypass all Rails pitfalls and glitches, I always suggest to use a sledgehammer that never betrays: write SQL and you are all set.

class UpdateWorkdate < ActiveRecord::Migration[5.0]
  def self.up
    Order.connection.execute("
      UPDATE orders
      SET workdate = internal_delivery_date + INTERVAL 1 DAY")
  end
end

Upvotes: 2

Related Questions