嵌入对象保存没有错误,但不在mongo中显示。怎么会这样?

时间:2014-02-18 01:17:33

标签: ruby-on-rails mongodb mongoid

我有:

Tree
  embeds_one :branch

Branch
  embedded_in :tree

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

返回true 和b.id返回一个长长的bsonid

然后我这样做:

Branch.all.first 

返回nil

这怎么可能?

此外,

我删除了embeds_one,embedded_in关系,所有这些都保存到了mongo。

发生了什么事?

2 个答案:

答案 0 :(得分:0)

你做不到。您必须从Tree创建一个对象,然后通过您创建的Tree对象从Branch创建一个对象,代码应为:

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

答案 1 :(得分:0)

更改Tree模型

embeds_one  :branch, cascade_callbacks: true

docs

所述
  

如果希望在其父级调用持久性操作时触发嵌入式文档回调,则需要为该关系提供级联回调选项。

另外还有一点需要注意: 嵌入式模型无法自行查询(如@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