Ruby on rails 需要MongoID和多对多关系方面的帮助吗
使用mongoid 2.0.0.beta.20,如果它意味着 这个目标很容易,但我无法实现。我有一个Ruby on rails 需要MongoID和多对多关系方面的帮助吗,ruby-on-rails,many-to-many,mongoid,Ruby On Rails,Many To Many,Mongoid,使用mongoid 2.0.0.beta.20,如果它意味着 这个目标很容易,但我无法实现。我有一个用户模型 references_many :worlds, :inverse_of => :users 还有一个世界,当然 references_many :users, :inverse_of => :worlds 换句话说,用户可以访问0..inf世界,而1..inf用户可以访问一个世界。World应该存储一个去过那里的用户ID列表,用户应该存储一个他访问过的世界ID列表。看起
用户
模型
references_many :worlds, :inverse_of => :users
还有一个世界
,当然
references_many :users, :inverse_of => :worlds
换句话说,用户可以访问0..inf世界,而1..inf用户可以访问一个世界。World应该存储一个去过那里的用户ID列表,用户应该存储一个他访问过的世界ID列表。看起来很简单,但不想为我工作
现在,有一个User实例(我们叫他某人)和两个World实例(earth
和mars
可能)。当我试图说有人访问了地球时,没有问题:
earth.users << someone
earth.users.count # => 1
一切都好吗?不确定:
earth.users.count # => 0
someone.worlds.count # => 0
我还尝试使用:stored_as=>:array
参数来表示关系,但根本没有成功(方向无关紧要):
someone.worlds使用MongoID,我相信您可能需要显式地earth。在使用类似earth.users的内容修改文档后保存该文档。如果您升级到最新的rc,那么您可以使用新宏来处理这些关系:
references\u和\u referenced\u在许多世界中
在beta 20中,使用:stored_as=>:array是正确的。尝试这样设置默认值,它应该适合您
references\u many:worlds,:storaged\u as=>:array,:default=>[]
我在我的控制器中显式调用save
(控制器只使用一个实例,所以没有其他方法)
earth.users.count # => 0
someone.worlds.count # => 0
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.<<