Почему проверка сгенерированной формы проверяет поле `: action` набора изменений вместо`: valid? `? - PullRequest
0 голосов
/ 28 июня 2018

Например, выдача

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 вместо этого?

Текущая форма действительно короче, и было полезно узнать, что клавиша :action предназначена только для nil, когда не было ошибок.

Существуют ли другие соображения, которые необходимо учитывать (например, добавление дополнительных полей позже), или это просто вопрос личных предпочтений?

1 Ответ

0 голосов
/ 28 июня 2018

Каким-то образом пропустил документацию Phoenix.HTML.Form , где в разделе " Записка по :errors" говорится, что

Если к ревизии не было применено никакого действия или было установлено действие :ignore, ошибки не отображаются на объекте формы, даже если набор изменений имеет непустое значение :errors.

Это полезно для таких вещей, как советы по проверке полей формы, например пустой набор изменений для новой формы. Это изменение не является действительным, но мы не хотите показывать ошибки, пока не будет выполнено действительное действие производится.

Пустой набор изменений по умолчанию недопустим:

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