class SetDefaultToFalse < ActiveRecord::Migration
def change
MyObject.where('done is ?', nil).each do |a|
a.done = false
a.save
end
end
end
如果我在之前的数据库转储中运行此操作,并且在完成所有其他旧迁移后,my_objects
中的任何done
字段都没有标记为false
字段}。如果我再次rake db:rollback
和db:migrate
,突然之间就可以了。为什么?列done
在此之前添加了5次以上的迁移。更改以前的迁移不是我正在寻找的解决方案。
答案 0 :(得分:1)
我不确定你为什么要在迁移中这样做,但这可能会有所帮助:
MyObject.where('done is ?', nil).update_all(done: false)
答案 1 :(得分:1)
答案 2 :(得分:0)
我建议你试试这段代码:
class SetDefaultToFalse < ActiveRecord::Migration
def self.up
MyObject.where('done is ?', nil).each do |a|
a.update_attribute(done: false)
end
end
end
答案 3 :(得分:0)
创建后添加完成字段。在db模式中,“done”字段不存在。
运行
rake db:migrate