我是如何获得 IrreversibleMigration 的?
How did I get a IrreversibleMigration?
我已经在我的用户 table 中添加了 'activated' 作为布尔值。我忘记默认将它添加为 false,所以我生成了这个迁移:
rails g migration add_default_to_users_activated
然后我在这里添加了第 3 行:
class AddDefaultToUsersActivated < ActiveRecord::Migration
def change
change_column_default :users, :activated, true
end
end
然后我运行迁移w/out有什么问题。我意识到我应该添加 'false' 而不是 'true',所以我想撤消迁移并将 add_default_to_users_activated.rb 文件更改为 'false'
然而当我 运行
rake db:rollback
rake 由于 ActiveRecord::IrreversibleMigration 而中止。
但是我设置的防止迁移被还原的机制是什么?我该如何修复它?
编辑:
我 运行宁 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 中,您应该按照@ChrisBarthol 的建议将 change
方法与 up
和 down
分开,因为 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
回滚时,您希望默认值是什么?从您编写的迁移中,对于默认值应设置为什么还不够明确。添加 from
和 to
应该可以解决问题,但在我看来,对于这样的迁移,最好明确说明 up 和 down 方法在做什么。
class AddDefaultToUsersActivated < ActiveRecord::Migration
def up
change_column_default :users, :activated, true
end
def down
change_column_default :users, :activated, nil
end
end
然后当你回滚时,它会将默认值设置为 nil,你可以将迁移编辑为 false,然后再次 rake db:migrate
。
我已经在我的用户 table 中添加了 'activated' 作为布尔值。我忘记默认将它添加为 false,所以我生成了这个迁移:
rails g migration add_default_to_users_activated
然后我在这里添加了第 3 行:
class AddDefaultToUsersActivated < ActiveRecord::Migration
def change
change_column_default :users, :activated, true
end
end
然后我运行迁移w/out有什么问题。我意识到我应该添加 'false' 而不是 'true',所以我想撤消迁移并将 add_default_to_users_activated.rb 文件更改为 'false' 然而当我 运行
rake db:rollback
rake 由于 ActiveRecord::IrreversibleMigration 而中止。
但是我设置的防止迁移被还原的机制是什么?我该如何修复它?
编辑: 我 运行宁 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 中,您应该按照@ChrisBarthol 的建议将 change
方法与 up
和 down
分开,因为 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
回滚时,您希望默认值是什么?从您编写的迁移中,对于默认值应设置为什么还不够明确。添加 from
和 to
应该可以解决问题,但在我看来,对于这样的迁移,最好明确说明 up 和 down 方法在做什么。
class AddDefaultToUsersActivated < ActiveRecord::Migration
def up
change_column_default :users, :activated, true
end
def down
change_column_default :users, :activated, nil
end
end
然后当你回滚时,它会将默认值设置为 nil,你可以将迁移编辑为 false,然后再次 rake db:migrate
。