Rails:调用Model.new时id字段为nil

Joe*_*tti 15 activerecord ruby-on-rails

我对rails中的自动增量id字段有点困惑.我有一个带有简单模式的rails项目.当我检查development.sqlite3时,我可以看到我的所有表都有一个带有自动增量的id字段.

CREATE TABLE "messages" ("id" INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, "text" text, "created_at" datetime, "updated_at" datetime);
Run Code Online (Sandbox Code Playgroud)

但是,当我打电话Message.new在控制台中,产生的对象具有idnil.

>> a = Message.new
=> #<Message id: nil, text: nil, created_at: nil, updated_at: nil>
Run Code Online (Sandbox Code Playgroud)

不应该id回来填充?

小智 24

不,这是正确的行为.当您通过new(如在您的示例中)创建对象时,Rails不会将其持久保存到数据库(仅在内存中).

如果你这样做Message.create,或者Message.save喜欢theIV说的话,那么id就会填充.


noo*_*oob 5

像无花果说,

n = Movie.new
n.save
=> true
Run Code Online (Sandbox Code Playgroud)

意味着它被保存并将被赋予一个ID.或者,

n = Movie.create!
Run Code Online (Sandbox Code Playgroud)

自动保存并将其存储在数据库中,并为其提供一行代码.