Mic*_*ael 4 reverse ruby-on-rails rollback rails-migrations rails-activerecord
我已经在我的用户表中添加了“激活”作为布尔值。我忘记将其添加为 false 作为默认值,所以我生成了此迁移:
rails g migration add_default_to_users_activated
Run Code Online (Sandbox Code Playgroud)
然后我在这里添加了第 3 行:
class AddDefaultToUsersActivated < ActiveRecord::Migration
def change
change_column_default :users, :activated, true
end
end
Run Code Online (Sandbox Code Playgroud)
然后我运行迁移没有任何问题。我意识到我应该添加“false”而不是“true”,所以我想反转迁移并将 add_default_to_users_activated.rb 文件更改为“false”但是当我运行时
rake db:rollback
Run Code Online (Sandbox Code Playgroud)
rake 由于 ActiveRecord::IrreversibleMigration 而中止。
但是我设置的机制是什么,可以防止迁移被恢复以及如何修复它?
编辑:我正在运行 Rails 4.2
在回滚之前更改迁移不是一个好主意。根据 Rails 5文档 change_column_default要求from,to属性是可逆的。
在 Rails 5 中,迁移应该如下所示:
class AddDefaultToUsersActivated < ActiveRecord::Migration
def change
change_column_default :users, :activated, from: nil, to: false
end
end
Run Code Online (Sandbox Code Playgroud)
在 Rails 4 中,您应该按照 @ChrisBarthol 的建议将change方法up与分开down,因为尚未引入from和to选项:
class AddDefaultToUsersActivated < ActiveRecord::Migration
def up
change_column_default :users, :activated, true
end
def down
change_column_default :users, :activated, nil
end
end
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2359 次 |
| 最近记录: |