Ecto cast_assoc Pheonix 编辑表单验证

Ecto cast_assoc Pheonix edit form validation

我正在 Ex_admin 设置自定义变更集的功能。我们正在使用 Ecto 2 中的新 cast_assoc 和 put_assoc 功能。我很好奇人们如何处理以下场景,因为据我所知,Ecto Pheonix 表单组合似乎没有很好地支持它:

  1. 我们有一个具有很多关系的模式。
  2. 用户进入编辑表单,编辑父架构中的数据 一个无效的方式。
  3. 用户删除一个有很多关系。
  4. 用户提交的表单无效。
  5. 带有验证错误的变更集用于重新呈现编辑表单,以便修复验证错误。

为了使用 cast_assoc 删除关系,您实际上需要从传递给 cast_assoc 方法的参数中删除已删除的项目。当父模式有效时,这可以正常工作。但是,当需要使用无效的变更集重新呈现编辑表单时,删除的关联将丢失。这是一种奇怪的 ui 体验,因为用户应该看到与他们提交的相同的状态,但添加了错误。

人们如何将删除的关联恢复到表单中?

因此,您似乎可以通过将删除操作附加到嵌套变更集来在相关模式端执行此操作。它在本文底部附近被很好地覆盖 http://blog.plataformatec.com.br/2015/08/working-with-ecto-associations-and-embeds/

我最近合并了一个改进关联处理的 PR。我们已从 ex_admin 中删除 "magic" 并将该责任委托给您的变更集。自述文件和测试有几个示例。

如果您将 has_many :through 用于多对多关联,则应将它们转换为 :many_to_many。这可以在没有任何架构更改的情况下完成。

请在 GitHub 上检查主分支。