2011-06-18 51 views
6

的方案是:两个1 - 中Mongoid(滑轨)N关系

如何帐户转到另一个帐户给收视率?这导致帐户中有两个列表。那些我评价过的人和那些评价过我的人。 (my_ratings和ratings_given)

这可以归结为:

怎样才能多1 - N的relationsips在Mongoid同一实体的工作?

In Mongoid's Docs它表示您可以使用has_manybelongs_to将实体链接在一起。

我现在有这对帐户

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

,这对评级

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

该文档不包括这种情况下,所以我想你会分化两者之间用:as作为参数。

这是甚至远程正确?

回答

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-many referenced page上提及这些选项。但是如果你看看relations上的一般页面,他们就会被覆盖。

在任何情况下,当有两个关联到同一个类时,您需要显式地链接ratings_given/rater和my_ratings/ratee关联,否则mongoid无法知道选择哪个可能的反向。

+0

重要的是要注意,当你有多个关系时,所有人都必须在双方都得到一个:inverse_of声明。否则,mongoid会感到困惑。 –