2011-03-16 122 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