2012-02-15 61 views

回答

78

嘗試change_column

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

要小心這種方法 - 如果您有關於該列的其他屬性(例如':limit'約束),則在使用'change_column'時需要重複這些屬性,否則它們將丟失。出於這個原因,我更喜歡使用'change_column_null' – 2015-03-09 15:51:25

+0

請注意,這會產生一個'IrreversibleMigration',這可能不是您想要的。 – 2017-02-17 14:30:50

+0

@NicNilov你說的是答案還是Nathan Wallace的評論? – Mark 2017-12-28 16:10:21

184

您還可以使用change_column_null

change_column_null :table_name, :column_name, false 
+5

最乾淨的答案! – 2014-06-16 17:51:56

+1

我不得不改變它的一堆列,這不需要指定每列的列類型,好多了! – Dorian 2015-01-08 12:19:44

+3

也適用於Rails 4+ – daniel 2015-07-10 09:23:19

6

1)第一名:用默認值添加列

2)然後:刪除默認值

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

這是正確的解決方案,當您需要添加不爲空的新列時,您需要先定義它具有默認值,因爲SQLLite會抱怨(無法添加具有默認值NULL的NOT NULL列),然後將其刪除! – Mil4n 2017-02-01 22:32:35

相關問題