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

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

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

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


person Martinos    schedule 15.05.2016    source источник


Ответы (1)


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")
person Dogbert    schedule 15.05.2016
comment
Мне пришлось изменить его на `‹%= error_tag @changeset, :base %› - person flp; 11.09.2017