自己参照の関連付けはどうですか:
class User
include Mongoid::Document
references_many :fans,
:class_name => 'User',
:stored_as => :array,
:inverse_of => :fan_of
references_many :fan_of,
:class_name => 'User',
:stored_as => :array,
:inverse_of => :fans
end
# let's say we have users: al, ed, sports_star, movie_star
sports_star.fans << al
movie_star.fans << al
sports_star.fans << ed
movie_star.fans << ed
movie_star.fans # => al, ed
al.fan_of # => sports_star, movie_star
問題は、埋め込まれたドキュメントのみを使用してリレーショナルアソシエーションを実行しようとしていることです。 Fan
がある場合 User
内に埋め込まれています 、Fan
にのみアクセスできます 親のUser
を介して 。 Fan.find(some_id)
のようなことはできません Fan
のコレクションがないため 記録。
最終的に、MongoDBはこれを可能にする仮想コレクションをサポートするようになります。今のところ、リレーショナルタイプの関連付けを使用する必要があります。この場合に埋め込みドキュメントを使用する場合は、親レコードを検索するための醜く非効率的なカスタムメソッドを作成する必要があります。
MongoDBとMongoidを使用すると、埋め込みアソシエーションとリレーショナルアソシエーションを簡単に切り替えることができることがわかりました。 SQLタイプの関係と埋め込まれた関係はどちらもその場所を持っており、一緒に使用して大きな効果を上げることができます。