Когда сохраняются объекты 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 dosome_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
ибо все потому, что он не позволяет мне перебирать инициализацию для внешнего метода, что я хотел бы иметь возможность делать. Я также не хочу совершать многократные поездки в базу данных.