我编写了一个迁移脚本来更新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]]
答案 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