例如,发出
mix phx.gen.html Accounts User users name:string age:integer
文档中的命令将生成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
?
目前的形式确实更短,并且只有在没有错误的情况下才nil
:action
密钥,这很有教育意义。
是否有任何其他需要考虑的因素(例如,稍后添加更多字段(,或者这只是个人喜好的问题?
不知何故错过了Phoenix.HTML.Form
文档,在">关于:errors
的说明"部分中说
如果未对变更集应用任何操作或操作设置为
:ignore
,即使变更集,表单对象上也不会显示任何错误 具有非空:errors
值。这对于表单字段上的验证提示之类的事情很有用,例如 新窗体的空变更集。该变更集无效,但我们 不想在实际用户操作之前显示错误 执行。
默认情况下,空变更集确实无效:
iex> %Ecto.Changeset{}
#Ecto.Changeset<action: nil, changes: %{}, errors: [], data: nil, valid?: false>