mongoid,用角色创建引用

时间:2011-01-20 10:12:21

标签: ruby-on-rails ruby-on-rails-3 mongodb entity-relationship mongoid

我对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

1 个答案:

答案 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