Когда сохраняются объекты Active Record в отношениях has_many?

Я использую Rails 1.2.3 (да, я знаю), и я не совсем понимаю, какhas_many работает в отношении постоянства объекта.

В качестве примера я буду использовать это в качестве своего объявления:

class User < ActiveRecord::Base
    has_many :assignments
end

class Assignment < ActiveRecord::Base
    belongs_to :user
end

Насколько я понимаю, это создает, среди прочего, методUser#assignments.build, который создаетAssignment объект которогоuser_id является получающим экземпляромid (и чьи другие поля соответствуют указанным в аргументе), но не сохраняет этот объект в базе данных. Объект можно сохранить позже, вызвавAssignment#save!.

Однако, Прагматичные Программисты & apos;Agile Web Development with Rails, Second Edition, который я использовал в качестве учебного пособия и справочника, говорит:

If the parent object exists in the database, then adding a child object to a collection automatically saves that child.

Кажется, здесь есть противоречие. Я хотел бы знать следующее:

If I do some_user.assignments.build, is the Assignment object saved? If I do some_user.assignments << Assignment.new, is the Assignment object saved? If I do some_user.assignments << Assignment.create, are two database calls made, or just one? What about if I modify the Assignment object between creating it and adding it to some_user.assignments? What happens if I save! an Assignment object whose corresponding User has not yet been saved in the database?

Постскриптум Причина, по которой я не просто используюUser#assignments.create ибо все потому, что он не позволяет мне перебирать инициализацию для внешнего метода, что я хотел бы иметь возможность делать. Я также не хочу совершать многократные поездки в базу данных.

Ответы на вопрос(1)

Ваш ответ на вопрос