次のようなモデルの構造があるとしましょう。
class User
include Mongoid::Document
include Mongoid::Timestamps
embeds_one :personal_data
embeds_one :professional_data
...
end
class PersonalData
include Mongoid::Document
include Mongoid::Timestamps
embeds_one :family_data
field :stuff, :type => String
...
end
class ProfessionalData
include Mongoid::Document
include Mongoid::Timestamps
field :stuff, :type => String
...
end
したがって、単純に言えば、ユーザーのデータ ツリーは次のようになります。
User -> PersonalData -> FamilyData
-> ProfessionalData
お気づきかもしれませんが、ユーザーの各サブ部分がいつ変更されるかを知りたいので、私の各モデルは Mongoid:Timestamps を使用しています。
ここで注意が必要なのは、新しいユーザーを作成するときに、適切なコールバックを使用してタイムスタンプを設定しながら、作成されたすべての組み込みモデルを自動的に取得することです。
理想的には、DB への複数回の書き込みを避けたいのですが、これを行うエレガントな方法はこれまでのところ見つかりませんでした。
今のところ、 User モデルにこれがあります:
after_create :create_personal_data
after_create :create_professional_data
PersonalData モデルでは、次のようになります。
after_create :create_family_data
ただし、結果は私が期待しているものではありません。ProfessionalData モデルではうまく機能し、作成され、TimeStamps コールバックが機能し、:created_at と :updated_at が適切に設定されます。ただし、PersonalData モデルでは、正しく機能しません: - 埋め込みモデルが作成されます - しかし、コールバックが正しく呼び出されず、TimeStamps が設定されません - 埋め込まれた FamilyData が PersonalData で作成されません
Rails 3.2でMongoid 2.4.12を使用しています
どうも。
アレックス