2012-02-15 10 views

cevap

78

change_column deneyin:

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

Bu yaklaşıma dikkat edin - eğer bu sütunla ilgili başka özellikleriniz varsa (örneğin, bir ': limit' kısıtlaması),' change_column' kullanırken bu özellikleri tekrarlamanız gerekir, yoksa kaybolacaktır. Bu nedenle, 'change_column_null' –

+0

'u kullanmayı tercih ediyorum. Bunun, istediğiniz gibi olmayan bir“ IrreversibleMigration ”oluşturduğuna dikkat edin. –

+0

@NicNilov cevabından mı bahsediyorsunuz OR Nathan Wallace'ın yorumu? – Mark

184

Ayrıca change_column_null kullanabilirsiniz:

change_column_null :table_name, :column_name, false 
+5

En temiz cevap! –

+1

Bir grup sütun için bunu değiştirmek zorunda kaldım ve bu, her sütun için sütun türünü belirtmeyi gerektirmiyor, çok daha iyi! – Dorian

+3

Rails 4+ – daniel

6

1) BİRİNCİ:

2) SONRA varsayılan değeri ile sütun ekleyin: Varsayılan değeri kaldırın

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

Bu, null olmayan yeni bir sütun eklemeniz gerektiğinde doğru çözümdür, ilk önce SQLLite (varsayılan değeri NULL olan bir NOT NULL sütunu eklenemiyor) ve sonra onu kaldırır çünkü varsayılan değerine sahip olduğunu tanımlamanız gerekir! – Mil4n