2013-03-12 11 views
5

Próbuję zrozumieć następujące oświadczenie, że jest z pliku szyny migracji:Zrozumienie oświadczenie szyny migracji (: null => false)

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

Rozumiem pierwsza część obu sprawozdań (wszystko przed przecinek), ale jestem pewien na zerowej części

:null => false 

jest to w zasadzie mówiąc: „jeśli nie istnieje, to jest fałszywe?” Logika wydaje się nieco dziwna, wszelkie wyjaśnienia na ten temat byłyby bardzo pomocne.

+0

To tylko argument hash. –

+4

@DaveNewton: Jeśli OP nie będzie w stanie odczytać cytowanych wypowiedzi, raczej nie zrozumie tego komentarza, prawda? –

+1

Cóż, '=> false' zdefiniowałby funkcję [bound] (http://coffeescript.org/#fat-arrow)' function() {return false; } '. Ale ': null' jest błędem składni. Jeśli zamiast tego byłby 'null:', byłby to [klucz do 'Object'] (http://coffeescript.org/#objects_and_arrays). –

Odpowiedz

2

Edytuj: Podjąłem pytanie dotyczące składni i tłumaczenia od czasu originally mentioned CoffeeScript. W celu zobaczenia, patrz Peter Bloom's answer.


Nie jestem pewien, co dokładnie oznacza :null => false.

Operator => jest separator klucz/wartość w Ruby, definiując Hash z :null klawisz Set false. Jest to podobne do : dla literału Object w CoffeeScript/JavaScript - { null: false }.

W przypadku użycia w liście argumentów jest to jedna opcja pozwalająca na/imitowanie nazwanych argumentów w Ruby.

Inną różnicą jest to, że główny coffeescript/JavaScript użyciu String s kluczy podczas Ruby zazwyczaj wykorzystuje Symbols - "null" (CS/js) vs. :null (RB).

Tak, składniowym równowartość w coffeescript byłoby:

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

W JavaScripcie, to:

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

[Odpowiedź] (http://stackoverflow.com/a/16598317/2909897) poniżej odpowiedział na moje pytanie we właściwym kontekście. – mbigras

19

:null => false w migracji Rails mówi bazy danych nie może przyjmować wartości NULL. Może być używany z :default => 0, aby nakazać bazy danych, aby użyły "0" jako wartości domyślnej (a), gdy NULL lub nic nie jest określone w zapytaniu lub (b) podczas tworzenia lub aktualizowania obiektu. (Pamiętaj, że '0' i NULL to nie to samo.)

2

Po pierwsze, zamiast używać x, użyłbym standardowej zmiennej t, która jest używana w migracji.

Teraz wewnątrz plików migracji obiekt t w create_table jest faktycznie typu ActiveRecord::ConnectionAdapters::TableDefinition.

I

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

faktycznie przekłada się

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

gdzie ostatni argument jest argumentem opcji metody column.

Według jednej z poniższych opcji documentation jest dopuszczalna lub niedozwolona wartość NULL w kolumnie.

Podsumowując, :null => false oznaczałoby "Nie zezwalaj na wartości NULL w kolumnie nowej lub aktualizacji".

Powiązane problemy