Ecto cast_assoc Pheonix编辑表单验证

时间:2017-01-24 18:47:52

标签: phoenix-framework ecto

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

  1. 我们有一个有很多关系的架构。
  2. 用户转到编辑表单,编辑父模式中的数据 一种无效的方式。
  3. 用户删除了很多关系。
  4. 用户提交无效表单。
  5. 带有验证错误的变更集用于重新呈现编辑表单,以便修复验证错误。
  6. 为了使用cast_assoc删除关系,您实际上需要从传递给cast_assoc方法的参数中删除已删除的项目。当父架构有效时,这可以正常工作。但是,当需要使用无效的变更集重新呈现编辑表单时,缺少已删除的关联。这是一种奇怪的ui体验,因为用户应该看到与他们提交的内容相同的状态,并添加了错误。

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

2 个答案:

答案 0 :(得分:0)

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

附近

答案 1 :(得分:0)

我最近合并了一个改善协会处理的公关。我们删除了"魔法"从ex_admin并将该责任委托给您的变更集。自述文件和测试有几个例子。

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

请在GitHub上查看主分支。