2011-03-16 120 views
3

考虑以下几点: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)或这个错误?任何解决方法?

谢谢!

乔纳森

回答

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 

而且 - 你可以预期的孩子嵌入到父文档中。如果是这样,你会想切换到“embedded_in”

+0

热潮!我喜欢stackoverflow - 谢谢你。我不知道那个自动保存模式。 – Jonathan 2011-03-16 20:32:55