2010-12-14 9 views
2

Mein Setup ist folgendes: Ich verwende Rails 3.0.1 mit einer PostgreSQL 9.0 Datenbank. Ich habe meine Modelle in Submodulen organisiert.Keine IDs beim Erstellen eines neuen Objekts in Rails mit PostgreSQL als Datenbank

Wenn ich die Konsole verwenden, um ein neues Objekt aller Art (c = ::Physical::Base::Contact.new) zu erstellen und zu speichern, wird die ID des Objekts nicht automatisch ausgefüllt. Es wird in die Datenbank geschrieben, aber mein Objekt, das ich habe gerade erstellt notiert nicht die ID, die von der Sequenz in PostgreSQL generiert wird. Mein Migrationsskript zum Erstellen der Tabelle ist unten. Ich schreibe sie selbst und benutze nicht die Standardgenerierungsfunktion, um mehr Kontrolle über meine Tabellen zu haben.

Ist dies ein PostgreSQL + Rails-Standardverhalten, oder fehle ich etwas, indem ich die Migrationen selbst schreibe?

Antwort

2

Stellen Sie sicher, dass Sie einen Primärschlüssel auf Ihrem Tisch, ich hatte das gleiche Problem in letzter Zeit, und es war sehr frustrierend. Ich beschloss, die Tabelle mithilfe von Migrationen neu zu erstellen und bemerkte, dass meine alte Tabelle keinen Primärschlüssel enthielt. Sobald ich es hinzugefügt habe, haben die Dinge wie erwartet funktioniert!

Sie benötigen etwas wie "alter Tabelle Kontakte hinzufügen Primärschlüssel (ID)" - ActiveRecord scheint nicht zu verstehen, wenn es keinen Primärschlüssel-Index für dieses Feld gibt.

Vor dem Primärschlüssel würde ich bekommen:

ruby-1.9.2-p0 > Job.create 
=> #<Job id: nil, data: nil, timestamp: nil, enqueued_at: nil, started_at: nil, completed_at: nil, status: nil, result: nil, job_queue_id: nil, job_handle: nil, uniq: nil, priority: nil, server_id: nil> 

Nun, da ich den Primärschlüssel hinzugefügt habe, ist das Ergebnis:

ruby-1.9.2-p0 > Job.create 
=> #<Job id: 17937, data: nil, timestamp: nil, enqueued_at: nil, started_at: nil, completed_at: nil, status: nil, result: nil, job_queue_id: nil, job_handle: nil, uniq: nil, priority: nil, server_id: nil> 
Verwandte Themen