通过可选的“inputs_for”输入的Phoenix嵌套表单会导致 Controller 中的 map 验证失败。因此,例如,帖子中有评论。如果我想在创建帖子时为帖子添加评论,则嵌套表单如下所示:
<%= form_for @changeset, @action, fn p -> %>
<%= text_input p, :body %>
<%= inputs_for p, :comments, fn c -> %>
<%= text_input c, :body %>
<% end %>
<% end %>
我填写了帖子正文,但是这次没有添加任何评论。这将为我们提供params [“post”] map 的 Controller
%{
"body" => "My post",
%{"comments" => %{"0" => %{"body" => ""}}
}
但是,注释是“可选的”。因此,为注释所做的验证将失败,因为有一个正文,但它为空。
然后的问题是,如果注释为空,如何删除/清理注释,但如果有一定价值,如何保留注释呢?清理参数“post”似乎并没有解决问题。
最佳答案
我猜您将不得不编写自己的scrub_comments
function plug,它将从评论 map 中删除空评论,如果它为空,则最终将其删除。
关于phoenix-framework - 如何使用Phoenix框架处理可选的嵌套输入?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/38042893/