我对mongoDB很新,我只是将它用于我正在开发的新rails项目。 我现在想做的是,让(嵌入式)文档引用另一个集合,但具有不同的角色。
不知何故,这似乎不起作用。我知道,我无法定义从外部集合到嵌入式集合的关系。所以在我的情况下,我无法从我的用户访问位置,我很好。不过,我需要定义referenced_in :location
部分,否则当我尝试向地方添加新位置时会收到错误消息undefined method 'name' for nil:NilClass
。
所以这只是前言。我的实际问题是,这些角色似乎不起作用。当我在地方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 :(得分: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