为什么Phoenix需要参数中的所有嵌套资源,使用cast_assoc或put_assoc

时间:2017-07-11 03:11:38

标签: elixir phoenix-framework ecto nested-resources

案例是one_to_many,我想同时插入和更新必要的最小嵌套资源。

根据https://hexdocs.pm/ecto/Ecto.Changeset.html#cast_assoc/3cast_assoc要求我们使用参数中的所有关联来更新/插入嵌套资源。如果我们不包含所有关联,则cast_assoc会针对缺少的关联调用:on_replace操作。

我认为使用Phoenix模板生成的表单是可以的,因为表单每次都会在参数中发送所有关联。但是如果这个函数适用于JS框架,我可以发送在Web浏览器上更改的必要性最小关联。在这种用例中,我是否可以在事务中重复更新或者像模板一样重复更新?

我觉得这种行为有点棘手。我觉得最好将参数明确添加到参数而不是:on_replace

你怎么看?

1 个答案:

答案 0 :(得分:1)

这不是凤凰城的要求,它是Ecto的要求。如果Ecto没有与您的架构有关的所有信息,那么它无法可靠地创建准确的变更集。

我并不是真正了解您的具体问题,但如果您想在不重新提供关联的情况下更新记录,则创建一个不会触及关联的单独变更集功能。