4

埋め込みドキュメントをモンゴイドで自動的に初期化する方法はありますか?私が意味することは、ガレージ文書を埋め込んでいるユーザーに与えられていることです。私は完全にガレージを持つユーザーを設定するには、次のコードを記述する必要があります。Mongoid:親の構築時に自動的に初期化される埋め込みドキュメント

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

は私がuser.build_garageを呼び出すスキップすることができる方法はありますか?

おかげ

答えて

6

あなたは、このようなユーザモデルにコールバックを追加することができます。クラスの各インスタンス化した後

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

このコールバック火災、それは「が見つかり」と「新」の後に発生します。

+0

これは、以前の埋め込みドキュメントを上書きするわけではないので、良いアイデアを見つけたのですか? – GTDev

+0

ユーザーのためにこれを行うmongoidの自動車はありますか? – GTDev

+0

私はあなたの最初の点を修正する答えを編集しました。いいえ、そのための自動化はありません。私はそのような機能は実際のアプリケーションコードに属すると言います。 – moritz

11

Mongoid 3はautobuildを持っています。関係がアクセスされたときにMongoidが新しい文書をインスタンス化するように指示するオプションはnilです。

embeds_one :label, autobuild: true 
has_one :producer, autobuild: true 
関連する問題