时间:2018-06-28 05:37:25

标签: phoenix-framework

例如,发布

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很有教育意义。

还有其他需要考虑的因素(例如,以后添加更多字段),还是个人喜好问题?

1 个答案:

答案 0 :(得分:0)

不知何故错过了Phoenix.HTML.Form documentation,在“ 关于 :errors ”的注释中,

  

如果未对变更集执行任何操作或将操作设置为   :ignore,即使变更集,表单对象上也不会显示任何错误   具有非空的:errors值。

     

这对于诸如表单域上的验证提示之类的事情很有用。   新表单的空变更集。该变更集无效,但我们   在实际的用户操作完成之前,不要显示错误   执行。

一个空的变更集在默认情况下确实是无效的:

iex> %Ecto.Changeset{}
#Ecto.Changeset<action: nil, changes: %{}, errors: [], data: nil, valid?: false>