Wann werden Active Record-Objekte in has_many-Beziehungen gespeichert?

Ich verwende Rails 1.2.3 (ja, ich weiß) und bin verwirrt darüber, wiehas_many arbeitet in Bezug auf Objektpersistenz.

Zum Beispiel werde ich dies als meine Deklaration verwenden:

class User < ActiveRecord::Base
    has_many :assignments
end

class Assignment < ActiveRecord::Base
    belongs_to :user
end

So wie ich es verstehe, generiert dies unter anderem eine MethodeUser#assignments.build, wodurch einAssignment Objekt dessenuser_id ist die empfangende Instanzid (und deren andere Felder wie im Argument angegeben sind), speichert dieses Objekt jedoch nicht in der Datenbank. Das Objekt kann später durch Aufruf gespeichert werdenAssignment#save!.

Die Pragmatischen ProgrammiererAgile Webentwicklung mit Rails, 2. Auflage, die ich als Tutorial und Referenz verwendet habe, sagt:

Wenn das übergeordnete Objekt in der Datenbank vorhanden ist, wird es beim Hinzufügen eines untergeordneten Objekts zu einer Sammlung automatisch gespeichert.

Hier scheint es einen Widerspruch zu geben. Was ich gerne wissen würde, ist:

Wenn ich machesome_user.assignments.build, ist derAssignment Objekt gespeichert?Wenn ich machesome_user.assignments << Assignment.new, ist derAssignment Objekt gespeichert?Wenn ich machesome_user.assignments << Assignment.create, werden zwei Datenbankaufrufe durchgeführt oder nur einer? Was ist, wenn ich das ändere?Assignment Objekt zwischen dem Erstellen und Hinzufügensome_user.assignments?Was passiert wenn ichsave! einAssignment Objekt, dessen entsprechendeUser wurde noch nicht in der Datenbank gespeichert?

P.S. Den Grund benutze ich nicht nurUser#assignments.create Denn alles liegt daran, dass ich die Initialisierung nicht auf eine externe Methode auslagern kann, was ich gerne tun würde. Ich möchte auch nicht mehrere Fahrten in die Datenbank machen.

Antworten auf die Frage(1)

Ihre Antwort auf die Frage