Bezdepbonusu7Программирование: статьи и ответы

Вопрос

Как добавить глобальную ошибку в набор изменений Ecto

Автор вопроса: MartinosОтветов: 1

Я хочу установить ошибку в Ecto.Changeset, которая не относится к полю.

В моем случае у меня есть форма входа, и я хочу установить ошибку, говорящую о том, что либо адрес электронной почты, либо пароль недействительны. Однако я все еще хочу выделить поле email или password, когда они пусты.

В Rails вы можете сделать это, добавив запись в errors[:base]. Есть ли аналог в Экто?

phoenix-frameworkelixirecto

Ответы

Ответ 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")

Перевод вопроса и ответов сообщества Stack Overflow, лицензия CC BY-SA. Оригинал на Stack Overflow.

Похожие материалы