2012-02-15 14 views

risposta

78

Prova change_column:

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

Fai attenzione con questo approccio: se avessi altri attributi su quella colonna (per esempio un vincolo ': limit'), devi ripetere quegli attributi quando usi' change_column', altrimenti andranno persi. Per questo motivo, preferisco usare 'change_column_null' –

+0

Nota che questo genera un 'IrreversibleMigration' che potrebbe non essere quello che vuoi. –

+0

@NicNilov stai parlando della risposta O il commento di Nathan Wallace? – Mark

184

È anche possibile utilizzare change_column_null:

change_column_null :table_name, :column_name, false 
+5

Risposta più pulita! –

+1

Ho dovuto cambiarlo per un mucchio di colonne e questo non richiede di specificare il tipo di colonna per ogni colonna, molto meglio! – Dorian

+3

Funziona anche con Rails 4+ – daniel

6

1) prima: Aggiunti colonna con valore predefinito

2) THEN: Rimuovere il valore predefinito

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

questa è la soluzione corretta quando è necessario aggiungere una nuova colonna che non sia nulla, è necessario prima definire che abbia valore predefinito perché SQLLite si lamenterà (Impossibile aggiungere una colonna NOT NULL con il valore predefinito NULL), quindi rimuoverlo! – Mil4n

Problemi correlati