Kiedy są zapisywane obiekty Active Record w relacjach has_many?

Używam Rails 1.2.3 (tak, wiem) i jestem zdezorientowany, jakhas_many działa w odniesieniu do trwałości obiektu.

Dla przykładu użyję tego jako mojej deklaracji:

class User < ActiveRecord::Base
    has_many :assignments
end

class Assignment < ActiveRecord::Base
    belongs_to :user
end

Jak rozumiem, generuje to między innymi metodęUser#assignments.build, który tworzyAssignment obiekt, któregouser_id jest instancją odbiorcyid (i których inne pola są zgodne z argumentem), ale nie zapisuje tego obiektu w bazie danych. Obiekt można zapisać później, dzwoniącAssignment#save!.

Jednak pragmatyczni programiściAgile Web Development with Rails, wydanie drugie, którego używałem jako samouczka i odniesienia, mówi:

Jeśli obiekt nadrzędny istnieje w bazie danych, dodanie obiektu podrzędnego do kolekcji automatycznie zapisuje to dziecko.

Wydaje się, że jest tu sprzeczność. Chciałbym wiedzieć:

Jeśli zrobięsome_user.assignments.build, jestAssignment obiekt zapisany?Jeśli zrobięsome_user.assignments << Assignment.new, jestAssignment obiekt zapisany?Jeśli zrobięsome_user.assignments << Assignment.create, czy wykonano dwa połączenia z bazą danych, czy tylko jedno? A jeśli zmodyfikujęAssignment obiekt pomiędzy jego utworzeniem a dodaniem gosome_user.assignments?Co się stanie, jeśli jasave! naAssignment obiekt, którego odpowiadaUser nie został jeszcze zapisany w bazie danych?

P.S. Powód, którego nie używamUser#assignments.create bo wszystko jest dlatego, że nie pozwala mi wyprowadzić inicjalizacji na zewnętrzną metodę, którą chciałbym zrobić. Nie chcę też dokonywać wielu podróży do bazy danych.

questionAnswers(1)

yourAnswerToTheQuestion