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

时间:2012-02-15 00:13:49

标签: ruby-on-rails database migration constraints notnull

在我的Rails(3.2)应用程序中,我的数据库中有一堆表但是我忘了添加一些非空约束。我已经google了一下,但我找不到如何编写一个向现有列添加非null的迁移。

TIA。

5 个答案:

答案 0 :(得分:249)

您还可以使用change_column_null

change_column_null :table_name, :column_name, false

答案 1 :(得分:90)

尝试change_column

change_column :table_name, :column_name, :column_type, null: false

答案 2 :(得分:9)

1)FIRST:添加默认值

的列

2)然后:删除默认值

add_column :orders, :items, :integer, null: false, default: 0
change_column :orders, :items, :integer, default: nil

答案 3 :(得分:1)

如果要在新创建的迁移脚本/方案上使用它,这是我们如何定义它

class CreateUsers < ActiveRecord::Migration[5.2]
  def change
    create_table :users do |t|
    t.string :name, null: false     # Notice here, NOT NULL definition
    t.string :email, null: false
    t.string :password, null: false
    t.integer :created_by
    t.integer :updated_by 

    t.datetime :created_at
    t.datetime :updated_at, default: -> { 'CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP' }
   end
  end
end

答案 4 :(得分:0)

在我的方法中,我将 NOT NULL 约束添加到我在现有迁移迁移中需要的列。 之后,我使用以下命令重置所有迁移:

<块引用>

耙数据库:迁移:重置

这将删除数据库,重新创建它并运行所有迁移。 您可以在 schema.rb 中检查您的更改。

如果您在简单迁移中只有很少的列,则可以使用这种方法。