Ruby 在本例中,Mongoid不保持父级和子级之间的关系?
我对这个问题摸不着头脑,弄不明白。父项和子项之间的关系未保存:Ruby 在本例中,Mongoid不保持父级和子级之间的关系?,ruby,mongodb,mongoid,Ruby,Mongodb,Mongoid,我对这个问题摸不着头脑,弄不明白。父项和子项之间的关系未保存: class Project has_many :project_elements, :autosave => true field :name, type: String class ProjectElement belongs_to :project field :name, type: String 现在我做到了: project = Project.new(name: "P
class Project
has_many :project_elements, :autosave => true
field :name, type: String
class ProjectElement
belongs_to :project
field :name, type: String
现在我做到了:
project = Project.new(name: "Project1")
project.save!
project_element = ProjectElement.new(name: "Element")
project_element.project = project
project_element.save!
# Test
test_proj = Project.where(name: "Project1").first
print test_proj.project_elements.where(name: "Element").first.name
这会为nil:NilClass抛出未定义的方法“name”错误。通过mongo shell查看原始数据库,名为“element”的项目元素上不存在项目id
。否则,数据都会被持久化,只是Project
和ProjectElement
之间的关系不存在
我正在使用Mongo2.4.10和最新的稳定mongoid gem
我遗漏了什么?我不知道为什么这不起作用(一般来说……这是一个错误),但要解决这个问题,你可以使用以下替代方法之一
project = Project.new(name: "Project1")
project.save!
#solution 1
project_element = ProjectElement.create!(name: "Element", project: project)
#solution 2
project.project_elements.create!(name: 'Element')
您可以将它与以前的解决方案一起使用.new
,但请记住在创建后保存对象,就像您在代码示例中所做的那样我有同样的问题,但没有解决它(看起来像是一个bug)。或者,您可以使用项目将èelement`添加到产品