我已经在我的用户表中添加了“激活”作为 bool 值。我忘了将它添加为默认值,所以我生成了这个迁移:
rails g migration add_default_to_users_activated
然后我在这里添加了第 3 行:
class AddDefaultToUsersActivated < ActiveRecord::Migration
def change
change_column_default :users, :activated, true
end
end
然后我在没有任何问题的情况下运行了迁移。我意识到我应该添加 'false' 而不是 'true',所以我想反转迁移,只需将 add_default_to_users_activated.rb 文件更改为 'false'
但是,当我运行时
rake db:rollback
由于 ActiveRecord::IrreversibleMigration,rake 中止。
但是我设置的机制是什么,可以防止迁移被还原,我该如何解决?
编辑:
我正在运行rails 4.2
最佳答案
在回滚之前更改迁移是个坏主意。根据 Rails 5 documentation change_column_default
需要 from
和 to
属性是可逆的。
在 Rails 5 中迁移应该是这样的:
class AddDefaultToUsersActivated < ActiveRecord::Migration
def change
change_column_default :users, :activated, from: nil, to: false
end
end
在 Rails 4 中,您应该分隔
change
方法 up
和 down
正如@ChrisBarthol 建议的那样,因为from
和 to
选项 was not introduced yet :class AddDefaultToUsersActivated < ActiveRecord::Migration
def up
change_column_default :users, :activated, true
end
def down
change_column_default :users, :activated, nil
end
end
关于ruby-on-rails - 我是如何获得不可逆迁移的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38596735/