2010-04-11 14 views
13

Estoy un poco confundido acerca del campo de autoincremento en los rieles. Tengo un proyecto de rieles con un esquema simple. Cuando reviso el archivo development.sqlite3 puedo ver que todas mis tablas tienen un campo de identificación con incremento automático.Rieles: el campo id es nulo cuando se llama a Model.new

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

Pero cuando llamo Message.new en la consola, el objeto resultante tiene un id de nil.

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

¿No debería el id regresar poblado?

Respuesta

23

No, ese es el comportamiento correcto. Cuando crea un objeto a través del new (como en su ejemplo), Rails no lo conserva en la base de datos (solo en la memoria).

Si lo hace Message.create, o Message.save como theIV dijo, entonces el id se llenará.

4

Por lo que yo sé, el campo id solo se asigna en save s, no en new s.

4

Al igual que la figura Dicho esto,

n = Movie.new 
n.save 
=> true 

significa que se guarda y se le dará un ID. Alternativamente,

n = Movie.create! 

lo guarda y almacena automáticamente en la base de datos y le da una identificación con una línea de código.

Cuestiones relacionadas