2013-03-12 14 views
5

ich die folgende Erklärung zu verstehen versuchen, ist es von einer Schienen-Migrationsdatei:Legendes Schienen Migration Anweisung (null => false)

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

ich das der erste Teil der beiden Aussagen zu verstehen (alles vor das Komma), aber ich bin auf dem Nullteil unsicher

:null => false 

ist das im Grunde sagen „wenn es nicht vorhanden ist, dann ist es falsch?“ Die Logik scheint nur ein bisschen seltsam, jede Klärung wäre sehr hilfreich.

+0

Es ist nur ein Hash-Argument. –

+4

@DaveNewton: Wenn der OP die zitierten Aussagen nicht lesen kann, ist es ziemlich unwahrscheinlich, dass er diesen Kommentar versteht, oder nicht? –

+1

Nun, '=> false' würde eine [bound] definieren (http://coffeescript.org/#fat-arrow)' function() {return false; } '. Aber ': null' ist ein Syntaxfehler. Wenn es stattdessen 'null:' wäre, dann wäre es ein [Schlüssel für ein 'Objekt'] (http://coffeescript.org/#objects_and_arrays). –

Antwort

2

Edit: Ich hatte die Frage über Syntax und Übersetzung seit es originally mentioned CoffeeScript. Für den Zweck, beziehen Sie sich auf Peter Bloom's answer.


Ich bin nicht sicher, was die :null => false genau bedeutet.

=> Der Operator ist ein Schlüssel/Wert-Separator in Ruby, ein Hash mit einem :null Schlüsselsatz false definieren. Es ist ähnlich wie : für eine Object Literal in CoffeeScript/JavaScript - { null: false }.

Bei Verwendung in einer Argumentliste ist es eine Option, um benannte Argumente in Ruby zuzulassen/zu imitieren.

Der andere wesentliche Unterschied besteht darin, dass Coffeescript/JavaScript String s für Schlüssel verwenden, während Ruby-Regel verwendet Symbols-"null" (cs/js) vs. :null (rb).

die syntaktische Äquivalent in Coffeescript So wäre:

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

In JavaScript, das ist:

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

Die [Antwort] (http://stackoverflow.com/a/16598317/2909897) unter dieser beantwortete meine Frage im richtigen Kontext. – mbigras

19

:null => false in einer Rails-Migration sagt Ihre Datenbank nicht NULL-Werte zu akzeptieren. Es kann mit :default => 0 verwendet werden, um Ihrer Datenbank mitzuteilen, dass sie '0' als Standardwert (a) verwenden soll, wenn in einer Abfrage NULL oder nichts angegeben ist oder (b) wenn ein Objekt erstellt oder aktualisiert wird. (Denken Sie daran, '0' und NULL sind nicht die gleichen Dinge.)

2

Erstens, statt x verwenden würde ich die Standard-t Variable, die in Migrationen verwendet wird.

Jetzt innerhalb der Migrationsdateien ist das t Objekt in create_table tatsächlich vom Typ ActiveRecord::ConnectionAdapters::TableDefinition.

Und

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

übersetzt eigentlich

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

wo das letzte Argument der Optionen Argument der column Methode.

Gemäß der documentation ist eine dieser Optionen :null, die NULL-Werte in der Spalte erlaubt oder verbietet.

Also, zusammenfassend :null => false würde bedeuten "NULL-Werte in der neuen oder Update-Spalte nicht zulassen".