Mongoid: встроенные документы автоматически инициализируются при построении родительского документа - PullRequest
5 голосов
/ 09 ноября 2011

Есть ли способ получить встроенные документы для автоматической инициализации при построении в mongoid? Я имею в виду того пользователя, который встраивает гаражный документ. Я должен написать следующий код, чтобы полностью настроить пользователя с гаражом:

user = User.create!(name: "John")
user.build_garage
user.garage.cars << Car.create!(name: "Bessy")

Есть ли способ пропустить вызов user.build_garage?

Спасибо

Ответы [ 2 ]

12 голосов
/ 30 сентября 2013

Mongoid 3 имеет опцию autobuild, которая указывает Mongoid создавать экземпляр нового документа при обращении к отношению, когда оно nil.

embeds_one :label, autobuild: true
has_one :producer, autobuild: true
6 голосов
/ 09 ноября 2011

Вы можете добавить обратный вызов для модели User следующим образом:

class User
  ...
  after_initialize do |u|
    u.build_garage unless u.garage
  end
  ...
end

Этот обратный вызов срабатывает после каждого создания экземпляра класса, поэтому он запускается после 'find' и 'new'.

...