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在控制台中,产生的对象具有id的nil.
>> 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就会填充.
像无花果说,
n = Movie.new
n.save
=> true
Run Code Online (Sandbox Code Playgroud)
意味着它被保存并将被赋予一个ID.或者,
n = Movie.create!
Run Code Online (Sandbox Code Playgroud)
自动保存并将其存储在数据库中,并为其提供一行代码.
| 归档时间: |
|
| 查看次数: |
12632 次 |
| 最近记录: |