2014-02-18 7 views
0

我:嵌入對象保存沒有錯誤,但不顯示在mongo中。怎麼會這樣?

Tree 
    embeds_one :branch 

Branch 
    embedded_in :tree 

b = Branch.create(tree=t).save 

返回true 和b.id返回長bsonid

然後我做的:

Branch.all.first 

返回零

這怎麼可能?

此外,

我刪除了embeds_one,embedded_in關係,這一切保存到蒙戈罰款。

這是怎麼回事?

+0

'Tree.first' - 那是什麼回報呢? – WiredPrairie

+0

無............ – hunterp

+0

如果分支被嵌入,那麼它不是獨立可查詢的。 (除非我誤解你有什麼) – WiredPrairie

回答

0

你不能那樣做。你必須創建樹的對象,然後創建分公司通過你創建的樹對象的對象,代碼應該是:

t = Tree.first || Tree.create 
b = t.branch.create 
0

改變Tree模型

embeds_one :branch, cascade_callbacks: true 

docs

規定

如果您想要在其父級上調用持久性操作時觸發嵌入式文檔回調,則需要爲relat提供級聯回調選項離子。

也一兩件事要注意: 嵌入式型號不能對自己進行查詢(由@WiredPrairie提到的)......只從父模型,所以

Branch.first # will always return nil 
Tree.first.branch # will return the embedded branch if found 

這點一個自我偏愛的問題 - 你可以忽略它 - 具有以下語法。

t.branch.create!(branch_attr) # or 
t.branch.create(branch_attr).save 
# i found both those syntaxes used more. 

b = Branch.create(tree=t).save 
相關問題