Rails 迁移:删除约束

Posted

技术标签:

【中文标题】Rails 迁移:删除约束【英文标题】:Rails Migration: Remove constraint 【发布时间】:2011-08-06 15:02:35 【问题描述】:

我在 Rails 应用程序中有一个表(在 schema.rb 中),如下所示:

create_table "users", :force => true do |t|
   t.string "name", :null=>false
   t.string "address", :null=>false
end

我想编写一个 Rails 迁移以允许地址字段为空。即迁移后,表格如下所示:

create_table "users", :force => true do |t|
   t.string "name", :null=>false
   t.string "address"
end

我需要做什么来移除约束?

【问题讨论】:

【参考方案1】:

在 Rails 4+ 中为了去除非空约束,你可以使用change_column_null:

change_column_null :users, :address, true

【讨论】:

你真的试过这个吗?如果你看一下函数的源代码,你只会看到:raise NotImplementedError, "change_column_null is not implemented" 在 postgresql 中使用过。 rails 在数据库特定的适配器中定义它,请参阅postgres、mysql。可以在apidock搜索其他人。因此,必须检查数据库适配器以获得支持,以防有人收到NotImplementedError 点赞!这里也是Rails guides 的链接。 这应该是选择的答案【参考方案2】:

不确定是否可以致电t.address?无论如何...我会像这样使用change_column

change_column :users, :address, :string, :null => true

文档... http://apidock.com/rails/ActiveRecord/ConnectionAdapters/SchemaStatements/change_column

【讨论】:

以上是关于Rails 迁移:删除约束的主要内容,如果未能解决你的问题,请参考以下文章

Ruby on Rails:如何使用迁移向现有列添加非空约束?

在 rails upgrade 迁移条目从模式迁移表中删除后

如何使用 Rails 迁移删除列

Rails 5:为啥即使我删除了迁移文件,rails 也会向 schema.rb 添加列

删除 sequelize 迁移中的约束

如何从现有迁移文件中删除脚本 rails