Я хочу установить ошибку в Ecto.Changeset, которая не относится к полю.
В моем случае у меня есть форма входа, и я хочу установить ошибку, говорящую о том, что либо адрес электронной почты, либо пароль недействительны. Однако я все еще хочу выделить поле email или password, когда они пусты.
В Rails вы можете сделать это, добавив запись в errors[:base]. Есть ли аналог в Экто?
Ответ 1 · рейтинг 18 · Dogbert
Ecto.Changeset.add_error позволяет передать любой атом в качестве ключа, это не обязательно должно быть поле этой модели. Вы можете добавить ошибку к :base следующим образом:
add_error(changeset, :base, "email or password is invalid")
а затем в вашем шаблоне выполните:
<%= error_tag f, :base %>
или (после проверки на наличие ошибки):
<%= @changeset.errors[:base] %>
Другой вариант для вашего варианта использования - добавить ошибку как к :email, так и к :password.
changeset
|> add_error(:email, "email or password is invalid")
|> add_error(:password, "email or password is invalid")