在这个例子中,Mongoid不会保持父母和孩子之间的关系吗?

时间:2014-06-19 06:00:53

标签: 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: "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

这会引发错误undefined method 'name' for nil:NilClass。使用mongo shell查看原始数据库时,project_id在名为" Element"的项目元素上不存在。否则所有数据都会保留,只是ProjectProjectElement之间的关系不存在。

我使用的是mongo 2.4.10以及最新稳定的mongoid gem。

我错过了什么?

1 个答案:

答案 0 :(得分:0)

嗯,我不知道为什么这不起作用(一般来说......这是一个错误AFAIK)但要解决这个问题,你可以使用下列其中一种方法

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一起使用,但请记住在创建后保存对象,就像在代码示例中一样