2013-03-12 4 views
5

Sto cercando di capire la seguente dichiarazione, è da un file binari di migrazione:intesa dichiarazione rotaie migrazione (: null => false)

x.datetime "new",  :null => false 
x.datetime "update", :null => false 

Capisco la prima parte di entrambe le istruzioni (tutto prima la virgola), ma sono incerto sulla porzione nulla

:null => false 

è questo sostanzialmente dicendo "se non esiste, allora è falsa?" La logica sembra un po 'strana, qualsiasi chiarimento su questo sarebbe di grande aiuto.

+0

È solo un argomento di hash. –

+4

@DaveNewton: Se l'OP non può leggere le dichiarazioni citate, è abbastanza improbabile che capisca quel commento, non direste? –

+1

Bene, '=> false' definirebbe un [bound] (http://coffeescript.org/#fat-arrow)' function() {return false; } '. Ma, ': null' è un errore di sintassi. Se fosse 'null:' invece, sarebbe una [chiave per un 'Object'] (http://coffeescript.org/#objects_and_arrays). –

risposta

2

Modifica: Avevo preso la domanda di essere sulla sintassi e la traduzione dal momento che è originally mentioned CoffeeScript. Per scopo, fare riferimento a Peter Bloom's answer.


io non sono sicuro di quello che il :null => false significa esattamente.

L'operatore => è un separatore chiave/valore in rubino, definente una Hash con un set :null chiave false. È simile a : per un valore letterale Object in CoffeeScript/JavaScript - { null: false }.

Quando utilizzato in un elenco di argomenti, è un'opzione per consentire/imitare argomenti denominati in Ruby.

L'altra differenza principale è che l'uso CoffeeScript/JavaScript String s per le chiavi, mentre Rubino utilizza in genere Symbols-"null" (CS/js) vs. :null (rb).

Così, l'equivalente sintattico in CoffeeScript sarebbe:

x.datetime "new",  null: false 
x.datetime "update", null: false 

In JavaScript, questo è:

x.datetime("new", { null: false }); 
x.datetime("update", { null: false }); 
+0

La [risposta] (http://stackoverflow.com/a/16598317/2909897) qui sotto ha risposto alla mia domanda nel giusto contesto. – mbigras

19

:null => false in una migrazione Rails dice il database non accettare i valori NULL. Può essere utilizzato con :default => 0 per indicare al database di utilizzare '0' come valore predefinito (a) quando NULL o nulla è specificato in una query o (b) durante la creazione o l'aggiornamento di un oggetto. (Ricorda, '0' e NULL non sono le stesse cose.)

2

In primo luogo, piuttosto che utilizzare x vorrei utilizzare la variabile standard t utilizzata nelle migrazioni.

Ora, all'interno dei file di migrazione l'oggetto t in create_table è in realtà di tipo ActiveRecord::ConnectionAdapters::TableDefinition.

E,

t.datetime "new", :null => false 
t.datetime "update", :null => false 

traduce in realtà per

t.column("new", :datetime, { :null => false }) 
t.column("update", :datetime, { :null => false }) 

dove l'ultimo argomento è l'argomento opzioni del metodo column.

In base allo documentation una di queste opzioni è :null che consente o non consente i valori NULL nella colonna.

Quindi, in sintesi :null => false significherebbe "Non consentire valori NULL nella colonna new o update".