在我的Rails(3.2)應用程序中,我在我的數據庫中有一堆表,但是我忘了添加一些非null約束。我已經搜索了一下,但我找不到如何編寫一個不會將null添加到現有列的遷移。Ruby on Rails:如何使用遷移向現有列添加非空約束?
TIA。
在我的Rails(3.2)應用程序中,我在我的數據庫中有一堆表,但是我忘了添加一些非null約束。我已經搜索了一下,但我找不到如何編寫一個不會將null添加到現有列的遷移。Ruby on Rails:如何使用遷移向現有列添加非空約束?
TIA。
change_column :table_name, :column_name, :column_type, null: false
您還可以使用change_column_null:
change_column_null :table_name, :column_name, false
1)第一名:用默認值添加列
2)然後:刪除默認值
add_column :orders, :items, :integer, null: false, default: 0
change_column :orders, :items, :integer, default: nil
這是正確的解決方案,當您需要添加不爲空的新列時,您需要先定義它具有默認值,因爲SQLLite會抱怨(無法添加具有默認值NULL的NOT NULL列),然後將其刪除! – Mil4n 2017-02-01 22:32:35
要小心這種方法 - 如果您有關於該列的其他屬性(例如':limit'約束),則在使用'change_column'時需要重複這些屬性,否則它們將丟失。出於這個原因,我更喜歡使用'change_column_null' – 2015-03-09 15:51:25
請注意,這會產生一個'IrreversibleMigration',這可能不是您想要的。 – 2017-02-17 14:30:50
@NicNilov你說的是答案還是Nathan Wallace的評論? – Mark 2017-12-28 16:10:21