Исправлено: я исправил ответ, чтобы использовать before_create и создавать, а не создавать связанные модели.Затем механизм ActiveRecord заботится о сохранении связанных моделей после сохранения родителя.
Я даже тестировал этот код!
# in your Room model...
has_many :doors
before_create :build_main_door
private
def build_main_door
# Build main door instance. Will use default params. One param (:main) is
# set explicitly. The foreign key to the owning Room model is set
doors.build(:main => true)
true # Always return true in callbacks as the normal 'continue' state
end
####### has_one case:
# in your Room model...
has_one :door
before_create :build_main_door
private
def build_main_door
# Build main door instance. Will use default params. One param (:main) is
# set explicitly. The foreign key to the owning Room model is set
build_door(:main => true)
true # Always return true in callbacks as the normal 'continue' state
end
Добавлено ...
Метод сборки добавляется механизмом модели-владельца оператором has_many.Поскольку в примере используется has_many: doors (имя модели Door), вызовом сборки является doors.build
. См. Документы для has_many и has_one , чтобы увидетьдобавлены дополнительные методы.
# If the owning model has
has_many :user_infos # note: use plural form
# then use
user_infos.build(...) # note: use plural form
# If the owning model has
has_one :user_info # note: use singular form
# then use
build_user_info(...) # note: different form of build is added by has_one since
# has_one refers to a single object, not to an
# array-like object (eg user_infos) that can be
# augmented with a build method
В Rails 2.x появилась опция автосохранения для ассоциаций.Я не думаю, что это относится к вышесказанному (я использую по умолчанию). Результаты тестирования автосохранения.