Rails: поле id равно нулю при вызове модели Model.new

Я немного запутался в поле auto-increment id в рельсах. У меня есть проект рельсов с простой схемой. Когда я проверяю development.sqlite3, я вижу, что все мои таблицы имеют поле id с автоматическим приращением.

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

Но когда я вызываю Message.new в консоли, результирующий объект имеет id из nil.

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

Не следует ли заполнять id?

Ответы

Ответ 1

Нет, это правильное поведение. Когда вы создаете объект через new (как в вашем примере), Rails не сохраняет его в базе данных (только в памяти).

Если вы выполняете Message.create или Message.save как theIV, тогда будет заполнен id.

Ответ 2

Насколько мне известно, поле id назначается только на save s, а не на new s.

Ответ 3

Как показано на рисунке,

n = Movie.new
n.save
=> true

означает, что он сохранен и ему будет присвоен идентификатор. В качестве альтернативы,

n = Movie.create!

автоматически сохраняет и сохраняет его в базе данных и присваивает ему идентификатор с одной строкой кода.