2010-04-11 59 views
13

我對rails中的自動遞增id字段有點困惑。我有一個簡單模式的rails項目。當我檢查development.sqlite3我可以看到,我所有的表都有一個自動增量的ID字段。Rails:調用Model.new時id字段爲零

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

但是,當我在控制檯呼叫Message.new,生成的對象爲nilid

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

不應該id回來填充?

回答

23

不,這是正確的行爲。當你通過new(如你的例子)創建一個對象時,Rails不會將它保存到數據庫(只在內存中)。

如果你這樣做Message.create,或Message.savetheIV說,那麼id將被填充。

4

據我所知,id字段只在save上分配,而不在new上。

4

如同圖所述,

n = Movie.new 
n.save 
=> true 

意味着它被保存和將給出一個ID。或者,

n = Movie.create! 

自動保存並將其存儲在數據庫中,併爲其提供一行代碼。