使用mongoid 2.0.0.beta.20,如果是的话。
目标很简单,但我无法得到它。我有一个User
模型,
references_many :worlds, :inverse_of => :users
和World
,当然,
references_many :users, :inverse_of => :worlds
用人的话说,用户可以访问0..inf世界,1..inf用户可以访问世界。 World应该存储在那里的用户ID列表,用户应该存储他访问过的世界ID列表。看起来很简单,但不想为我工作。
现在,有一个User实例(让我们称呼他为someone
)和两个World实例(earth
和mars
)。当我试图说someone
访问earth
时,没有问题:
earth.users << someone
earth.users.count # => 1
然后,我想说someone
也在mars
:
mars.users << someone
mars.users.count # => 1
一切都好吗?不确定:
earth.users.count # => 0
someone.worlds.count # => 0
我也尝试将:stored_as => :array
参数用于关系,但根本没有成功(方向无关紧要):
someone.worlds << earth
NoMethodError: You have a nil object when you didn't expect it!
You might have expected an instance of Array.
The error occurred while evaluating nil.<<
(以及任何其他Array
方法引发我尝试处理nil)
也许我错过了文档中的某些内容或做错了什么。请帮我解决这个问题。
答案 0 :(得分:0)
使用MongoID我相信您可能需要在使用earth.save
之类的内容修改文档后明确earth.users << someone
,以便继续更改“文档”。
答案 1 :(得分:0)
如果你升级到最新的rc,那么你可以使用新的宏来做这些关系:
references_and_referenced_in_many :worlds
在测试版20中,您使用的方式处于正确的轨道:stored_as =&gt; :阵列。尝试设置这样的默认值,它应该适合你。
references_many :worlds, :stored_as => :array, :default => []