gpt4 book ai didi

ruby-on-rails - 我是如何获得不可逆迁移的?

转载 作者:行者123 更新时间:2023-12-03 22:40:44 25 4
gpt4 key购买 nike

我已经在我的用户表中添加了“激活”作为 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需要 fromto属性是可逆的。

在 Rails 5 中迁移应该是这样的:

class AddDefaultToUsersActivated < ActiveRecord::Migration
def change
change_column_default :users, :activated, from: nil, to: false
end
end

在 Rails 4 中,您应该分隔 change方法 updown正如@ChrisBarthol 建议的那样,因为 fromto选项 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com