我有:
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。
发生了什么事?
答案 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