Mongoid不坚持协会

时间:2011-03-16 20:09:47

标签: ruby-on-rails mongodb mongoid

请考虑以下事项:

class Parent
  include Mongoid::Document
  field:name
  references_one :child

  before_create :initialize_child

  protected

  def initialize_child
    self.child = Child.create
  end

end

class Child
  include Mongoid::Document
  field:name
  referenced_in :parent
end

在控制台中,我得到以下奇怪的行为:

> p = Parent.create
 => #<Parent _id: 4d811748fc15ea355d00000b, name: nil> 
> p.child
 => #<Child _id: 4d811748fc15ea355d00000c, name: nil, parent_id: BSON::ObjectId('4d811748fc15ea355d00000b')> 

到目前为止一切顺利。现在,当我尝试获取父母,然后找到孩子 - 没有运气......

> p = Parent.last
 => #<Parent _id: 4d811748fc15ea355d00000b, name: nil> 
> p.child
 => nil 

mongoid rc6和rc7

都会发生这种情况

我做错了什么(我是mongoid的新手)还是这个bug?有什么工作吗?

谢谢!

乔纳森

1 个答案:

答案 0 :(得分:4)

由于未嵌入子级,因此不会自动将其保存在自己的

尝试

class Parent
  include Mongoid::Document
  field:name
  references_one :child, autosave: true 

  before_create :initialize_child

  protected
  def initialize_child
    self.child ||= Child.new
  end
end

此外 - 您可能希望将Child嵌入父文档中。如果是这样,您将需要切换到“embedded_in”