2011-06-18 6 views
6

シナリオは次のとおりです。つ1 - Mongoid(レール)でNの関係

アカウントが別のアカウントに評価を与えることができますどのように?これにより、アカウントに2つのリストが表示されます。私が評価した人と私を評価した人。 (my_ratingsとratings_given)

これはつまるところ:

どのようにすることができます1、複数の - Mongoidで同じエンティティ仕事にN relationsips?

In Mongoid's Docshas_manybelongs_toを使用してエンティティをリンクすることができます。

私は現在アカウント評価

has_many :ratings, :as => "my_ratings" 
    has_many :ratings, :as => "ratings_given" 

と、この上でこれを持っている:

belongs_to :user, :as => 'Rater' 
belongs_to :user, :as => 'Ratie' 

ドキュメントはこのケースをカバーしていないので、私はあなたが区別しなければならないだろうと思いました2つの間には:パラメータを使用します。

これは正確なリモート処理ですか?あなたがCLASS_NAMEとinverse_ofオプションを使用して欲しいものを達成することができます

答えて

18

class Account 
    include Mongoid::Document 
    field :name 
    has_many :ratings_given, :class_name => 'Ratings', :inverse_of => :rater 
    has_many :my_ratings, :class_name => 'Ratings', :inverse_of => :ratee 
end 

class Ratings 
    include Mongoid::Document 
    field :name 
    belongs_to :rater, :class_name => 'Account', :inverse_of => :ratings_given 
    belongs_to :ratee, :class_name => 'Account', :inverse_of => :my_ratings 
end 

を、私はそれを最後に働いていたので、ドキュメントはので、私はこれはまだ推奨される手法であるかどうかわからなかった変更されました。 1-many referenced pageのオプションについては言及していないようです。しかし、一般的なページrelationsを見れば、それらはそこに隠されています。

同じクラスに2つの関連がある場合、ratings_given/raterとmy_ratings/rateeの関連付けを明示的にリンクする必要があります。そうでなければ、mongoidは2つの潜在的な逆転のどちらを選択するのかわかりません。

+0

複数のリレーションシップを持つ場合、すべてがinverse_of宣言を両方の側で取得する必要があることに注意することが重要です。さもなければ、モンゴイドは混乱します。 –

関連する問題