7

親ドキュメントがあり、2 つの異なるタイプの埋め込みドキュメントが必要な状況があります。1 つは親として、もう 1 つはオプションの親を持つ子としてです。例えば:

class ParentDoc
  include Mongoid::Document
  embeds_many :special_docs
  embeds_many :special_doc_groupings
end

class SpecialDoc
  include Mongoid::Document
  embedded_in :parent_doc
  belongs_to :special_doc_groupings
end

class SpecialDocGrouping
  include Mongoid::Document
  embedded_in :parent_doc
  has_many :special_docs
end

この例では、SpecialDocs と SpecialDocGroupings は関係なしで存在することも、必要に応じて親子関係を持つこともできます。

ただし、次のエラーが発生するため、これは無効な Mongoid 関連付けです。

Mongoid::エラー::MixedRelations:

問題: SpecialDoc が埋め込まれているため、リレーショナル アソシエーションを介して SpecialDocGrouping ドキュメントから (n) SpecialDoc ドキュメントを参照することはできません。

概要: SpecialDocGrouping から a(n) SpecialDoc に適切にアクセスするには、参照は SpecialDoc のルート ドキュメントを通過する必要があります。単純なケースでは、これは Mongoid がルートの追加の外部キーを保存することを必要とし、SpecialDoc が複数レベルの深さであるより複雑なケースでは、階層の上位の親ごとにキーを保存する必要があります。

解決策: SpecialDoc を埋め込まないことを検討するか、アプリケーション コードで独自の方法でキー ストレージとアクセスを実行します。

Mongoid でサポートされていないことを除けば、作成しようとしている関連付けの種類に問題はありません。

このタイプの関連付けを自分で実装するにはどうすればよいですか?

4

1 に答える 1