2010-04-11 18 views
13

Sono un po 'confuso riguardo al campo dell'identificatore automatico nei binari. Ho un progetto di rotaie con uno schema semplice. Quando controllo lo sviluppo.sqlite3 posso vedere che tutte le mie tabelle hanno un campo id con incremento automatico.: il campo ID è nullo quando si chiama Model.new

CREATE TABLE "messages" ("id" INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, "text" text, "created_at" datetime, "updated_at" datetime); 

Ma quando chiamo Message.new nella console, l'oggetto risultante ha un id di nil.

>> a = Message.new 
=> #<Message id: nil, text: nil, created_at: nil, updated_at: nil> 

non dovrebbe la id tornare popolato?

risposta

23

No, questo è il comportamento corretto. Quando crei un oggetto tramite new (come nel tuo esempio), Rails non lo mantiene nel database (solo in memoria).

Se lo fai Message.create, o Message.save come theIV detto, allora la id verranno popolati.

4

Per quanto ne so, il campo id viene assegnato solo su save s, non su new s.

4

Come fig detto,

n = Movie.new 
n.save 
=> true 

significa che è salvato e sarà dato un ID. In alternativa,

n = Movie.create! 

salva automaticamente e lo memorizza nel database e gli dà un ID con una sola riga di codice.

Problemi correlati