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

标签 ruby-on-rails rails-activerecord reverse rollback rails-migrations

我已经在我的用户表中添加了“激活”作为 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/

相关文章:

ruby-on-rails - hacking gitlab - 在问题模型中添加一个字段

ruby-on-rails - 如何在 Rails 中正确插入或更新记录?

string - 在超过一百万个字符串的列表中按相反顺序排列字符串对?

java - 字符串的无效递归反转方法

ruby-on-rails - 无法使用:text in typed_store

ruby-on-rails - NGINX 和配置文件中的环境变量

javascript - Rails select_tag - jQuery/JavaScript 在更改事件上隐藏/显示

ruby-on-rails - Rails 查询 JSON 数据类型中数组的方法

ruby-on-rails - 如何让 Rails 为这次迭代执行正确的单个 SQL 连接查询?

c++ - 递归地反转字符串中的单词