Rails迁移脚本更改不会持久

时间:2014-03-25 11:08:57

标签: ruby-on-rails activerecord

我编写了一个迁移脚本来更新ActiveRecord中的所有先前记录。

class UpdateListCompletedAtFields < ActiveRecord::Migration

def up
    Car.find_each do |car|
        if car.list_car_step_3_finished?
            car.list_completed_at = Time.now
            puts "Car #{car.id} list_completed, updating list_completed_at: #{car.list_completed_at}"
        end
    end
  end

end

当我运行迁移脚本时,puts消息正确地输出字段car.list_completed_at,但是当我进入rails控制台(我被拔出后)并尝试检查数据时,迁移不会持续存在。我想知道我是否遗漏了什么?

Car.all.map{|m| [m.list_car_step_3_finished, m.list_completed_at]}
=>[[true, nil], [true, nil], [nil, nil], [nil, nil], [nil, nil], [nil, nil], [nil, nil], [nil, nil], [nil, nil], [true, nil], [nil, nil]]

2 个答案:

答案 0 :(得分:2)

您忘记保存car记录:

car.list_completed_at = Time.now
car.save
# (...)

答案 1 :(得分:0)

使用update_attribute更新数据库

if car.list_car_step_3_finished?
   car.update_attribute(:list_completed_at, Time.now)
   puts "Car #{car.id} list_completed, updating list_completed_at:#car.list_completed_at}"
end