我正在我的Rails应用程序中创建一个新资源,发送到我的端点的JSON如下所示:
{
"resource1": {
"resource2_attributes": [{
"name": "Test 1",
"resource3_attributes": [{
"field1": "test"
}]
}]
}
}
嵌套属性正常工作,并且正在设置父模型上的关联。
但是,当保存顶级resource1
时,会触发模型上的after_create
回调(在保存关联之前)。 after_create
上的Resource1
回调使用子关联作为其逻辑。
如何让我的Rails应用程序保存父模型以及子关联,然后运行回调?
答案 0 :(得分:1)
原来Rails无法完成我在本篇文章时所做的工作。
我被建议添加一个after_add
关联回调,但是传递给该方法的记录没有设置id
,因为它还没有将它提交到数据库。 after_add
方法需要访问id
,因为它创建了相关记录,但如果没有id
则无法访问。
下一个选项:
而是在关联上使用after_add
回调,因为在父模型上添加ActiveRecord回调是行不通的,因为执行顺序是这样的:Save Parent - >运行父回调 - > Save Children,当“Run Parent Callback”部分需要子数据时,但由于操作顺序尚未创建,因此无法获取子数据。
因此,我最终采用的路线是将回调放在子模型上,并引用我所需数据的父关联。
不是最喜欢的方法,因为我不能在父模型中拥有逻辑,在我看来,它应该属于哪个,但至少一切都运行顺畅,数据才有意义。