从Rails迁移中删除默认值

Moo*_*osa 24 rails-migrations ruby-on-rails-4

我发现了几个关于编辑迁移的类似问题,但无法解决这个问题.我进行了rails迁移,然后打开了迁移文件并在该字段中添加了默认值选项.然后运行rake db:migrate.默认值按预期填充.然后稍后进行一些迁移,我决定要删除默认值选项.我怎么做?

如果这是我最后一次迁移,我会使用db:rollback并重新创建,但由于之前完成了一些迁移,我不知道如何解决这个问题.

感谢帮助.

sev*_*cat 49

创建新的迁移和使用change_column_default.

http://apidock.com/rails/ActiveRecord/ConnectionAdapters/SchemaStatements/change_column_default

为列设置新的默认值:

change_column_default(:suppliers, :qualification, 'new')
change_column_default(:accounts, :authorized, 1)
Run Code Online (Sandbox Code Playgroud)

将默认值设置为nil会有效地删除默认值:

change_column_default(:users, :email, nil)
Run Code Online (Sandbox Code Playgroud)

  • 不,只需生成一个迁移并将其称为"change_default_on_suppliers_qualification"之类的相关内容,然后编辑迁移并添加`change_column_default`方法.并非一切都可以自动为您生成. (3认同)
  • @Vishal 不,它只会更改新插入的行的默认值。其他行已经有一个值集。 (2认同)

Tom*_*ord 16

Rails 5+

使包含有哈希:from:to将使这个改变可逆的迁移:

change_column_default(:posts, :state, from: nil, to: "draft")
Run Code Online (Sandbox Code Playgroud)

因此,我建议尽可能使用此格式.