2011-06-18 3 views
6

Le scénario est:1 - N relations dans MongoId (Rails)

Comment un compte donner des notes à un autre compte? Cela entraîne deux listes sur le compte. Ceux que j'ai notés et ceux qui m'ont évalué. (my_ratings et ratings_given)

Cela revient à:

Comment multiple 1 - N relationsips au travail même entité MongoId?

In Mongoid's Docs il est dit que vous pouvez utiliser has_many et belongs_to pour lier les entités ensemble.

J'ai actuellement ce sur compte

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

et ceci sur Évaluations:

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

Les documents ne couvrent pas ce cas, donc je pensais que vous auriez à différencier entre les deux avec un: comme paramètre.

Est-ce que cela est encore correct?

Répondre

18

Vous pouvez obtenir ce que vous voulez en utilisant le class_name et inverse_of Options:

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 

La documentation a changé depuis avec elle, donc je mon dernier travail était pas sûr que ce soit encore l'approche recommandée. On dirait qu'il ne mentionne pas ces options sur le 1-many referenced page. Mais si vous jetez un oeil à la page générale sur relations ils sont couverts là.

Dans tous les cas vous devez lier explicitement les associations ratings_given/rater et my_ratings/ratee quand il y a deux associations à la même classe, sinon mongoid n'a aucun moyen de savoir lequel des deux inverses potentiels choisir.

+0

Il est important de noter que lorsque vous avez plusieurs relations, toutes doivent obtenir une déclaration: inverse_of, des deux côtés. Sinon, la mongoïde devient confuse. –

Questions connexes