2

我对mongoDB非常陌生,我只是将它用于我正在开发的一个新的rails项目。 我现在想要做的是让一个(嵌入式)文档引用另一个集合,但是具有不同的角色。mongoid,创建角色引用

不知何故,这似乎并不奏效。我知道,我无法从外部集合中定义一个关系到我的嵌入关系。所以在我的情况下,我无法访问我的用户的位置,我很好。不过,我需要定义referenced_in :location部分,否则在尝试向场所添加新位置时会收到错误消息​​。

这就是前言。我的实际问题是,这些角色的东西似乎没有工作。当我在地点locations.create(:user_a => some_user)中创建类似的新位置时,也会为该用户设置user_b

有什么办法可以使这个工作?或者我做错了什么?

class Place 
    include Mongoid::Document 
    embeds_many :locations 
end 

class Location 
    include Mongoid::Document 
    embedded_in :place, :inverse_of => :locations 
    references_one :user_a, :class_name => "User" #, :stored_as => :array 
    references_one :user_b, :class_name => "User" #, :stored_as => :array 
end 

class User 
    include Mongoid::Document 
    referenced_in :location, :inverse_of => :dropper 
    referenced_in :location, :inverse_of => :picker 
end 
+0

您使用哪种mongoid版本? – shingara 2011-01-20 10:24:46

+0

sry,完全忘了:mongoid 2.0.0.beta.20 on rails 3.0.3 – Dennis 2011-01-20 10:39:02

回答

1

我认为你必须消除歧义两个位置的关联(因为引用存储在referenced_in侧):

class User 
    include Mongoid::Document 
    referenced_in :location_a, :inverse_of => :user_a, :class_name => "Location" 
    referenced_in :location_b, :inverse_of => :user_b, :class_name => "Location" 
end 

我不禁感慨,有可能是一个更好的办法这样做虽然...

这是一个更好的方法?

class Location 
    include Mongoid::Document 
    embedded_in :place, :inverse_of => :locations 
    referenced_in :user_a, :class_name => "User" 
    referenced_in :user_b, :class_name => "User" 
end 

class User 
    include Mongoid::Document 
end