0

次のようなモデルの構造があるとしましょう。

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を使用しています

どうも。

アレックス

4

0 に答える 0