6

シナリオは次のとおりです。

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

これは要約すると次のようになります。

同じエンティティへの複数の1-Nリレーションシップは、Mongoidでどのように機能しますか?

Mongoidのドキュメントでは、エンティティを一緒に使用has_manyおよびリンクできると記載されています。belongs_to

私は現在アカウントにこれを持っています

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

とこれの評価

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

ドキュメントはこのケースをカバーしていないので、:asパラメーターを使用して2つを区別する必要があると思いました。

これもリモーティングは正しいですか?

4

1 に答える 1

18

class_nameおよびinverse_ofオプションを使用して、目的を達成できます。

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-多くの参照ページでこれらのオプションについて言及されていないようです。しかし、関係に関する一般的なページを見ると、そこで説明されています。

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

于 2011-06-18T08:45:31.793 に答える