2010-04-11 64 views
13

Tôi hơi bối rối về trường id gia tăng tự động trong đường ray. Tôi có một dự án đường ray với một lược đồ đơn giản. Khi tôi kiểm tra development.sqlite3 tôi có thể thấy rằng tất cả các bảng của tôi có một trường id với tăng tự động.Đường ray: trường id là 0 khi gọi Model.new

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

Nhưng khi tôi gọi Message.new trong giao diện điều khiển, đối tượng kết quả có id của nil.

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

Không nên id trở về dân cư?

Trả lời

23

Không, đó là hành vi đúng. Khi bạn tạo một đối tượng qua new (như trong ví dụ của bạn), Rails không lưu giữ nó vào cơ sở dữ liệu (chỉ trong bộ nhớ).

Nếu bạn làm Message.create hoặc Message.save như theIV cho biết, thì id sẽ được điền.

4

Theo như tôi biết, trường id chỉ được chỉ định trên save s, không phải trên new s.

4

Giống như vả nói,

n = Movie.new 
n.save 
=> true 

có nghĩa là nó được lưu và sẽ được cung cấp một ID. Hoặc,

n = Movie.create! 

tự động lưu và lưu trữ nó trong cơ sở dữ liệu và cung cấp ID cho một dòng mã.

Các vấn đề liên quan