2016-05-15 2 views
5

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

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

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

ответ

10

Ecto.Changeset.add_error позволяет передавать любой атом в качестве ключа, он не обязательно должен быть полем этой модели. Вы можете добавить ошибку :base так:

add_error(changeset, :base, "email or password is invalid") 

, а затем в шаблоне, либо сделать:

<%= error_tag f, :base %> 

или (после проверки, если есть ошибка):

<%= @changeset.errors[:base] %> 

Другим вариантом для вашей usecase является добавление ошибки как на :email, так и на :password

changeset 
|> add_error(:email, "email or password is invalid") 
|> add_error(:password, "email or password is invalid") 
+0

Мне пришлось изменить его на '<% = error_tag @changeset,: base%> – flp

Смежные вопросы