例如,发布
mix phx.gen.html Accounts User users name:string age:integer
命令from the docs将生成form.html.eex
:
<%%= form_for @changeset, @action, fn f -> %>
<%%= if @changeset.action do %>
<div class="alert alert-danger">
<p>Oops, something went wrong! Please check the errors below.</p>
</div>
<%% end %>
<%= for {label, input, error} <- inputs, input do %>
<%= label %>
<%= input %>
<%= error %>
<% end %>
<div>
<%%= submit "Save" %>
</div>
<%% end %>
是否有理由不检查@changeset.valid? == false
?
当前形式确实更短,并且在没有错误的情况下了解到:action
键仅是nil
很有教育意义。
还有其他需要考虑的因素(例如,以后添加更多字段),还是个人喜好问题?
答案 0 :(得分:0)
不知何故错过了Phoenix.HTML.Form
documentation,在“ 关于 :errors
”的注释中,
如果未对变更集执行任何操作或将操作设置为
:ignore
,即使变更集,表单对象上也不会显示任何错误 具有非空的:errors
值。这对于诸如表单域上的验证提示之类的事情很有用。 新表单的空变更集。该变更集无效,但我们 在实际的用户操作完成之前,不要显示错误 执行。
一个空的变更集在默认情况下确实是无效的:
iex> %Ecto.Changeset{}
#Ecto.Changeset<action: nil, changes: %{}, errors: [], data: nil, valid?: false>