2011-03-01 46 views
0

使用mongoid 2.0.0.beta.20,如果它的意思。需要MongoID和多对多关系的一些帮助

目标很简单,但我无法得到它。我有一个User模型,

references_many :worlds, :inverse_of => :users 

World,其中,当然,

references_many :users, :inverse_of => :worlds 

在人的话,用户可以访问0..inf世界,以及世界可以通过访问1..inf用户。世界应该存储那些曾经在那里的用户的ID列表,并且用户应该存储他访问过的世界ID的列表。看起来很容易,但不想为我工作。

现在,有一个用户实例(我们称他为someone)和两个世界实例(earthmars也许)。当我尝试说someone访问earth,没有任何问题:

earth.users << someone 
earth.users.count # => 1 

然后,我想说的是,someone也已经在mars

mars.users << someone 
mars.users.count # => 1 

一切都OK?不知道:

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方法是提高我试图处理无)

也许我错过了文档中的东西或做错了什么。请帮我解决这个问题。

回答

0

如果您升级到最新的RC,那么你可以使用新的宏做的各种关系:

references_and_referenced_in_many :worlds

在测试20,您使用在正确的轨道上:stored_as => :阵列。尝试设置一个默认像这样,它应该为你工作。

references_many :worlds, :stored_as => :array, :default => []

+0

升级到2.0.0.rc.1是有帮助的,谢谢 – at8eqeq3 2011-03-01 15:56:58

0

对于MongoID,我相信你可能必须明确earth.save该文件修改它之类的东西如earth.users << someone为了坚持改变'文件'。

+0

我明确地调用'save'在我的控制器(控制器可与只有一个实例,所以没有别的办法) – at8eqeq3 2011-03-01 11:24:58