如何将全局错误添加到Ecto Changeset

时间:2016-05-15 16:01:29

标签: elixir phoenix-framework ecto

我想在不特定于某个字段的Ecto.Changeset上设置错误。

在我的情况下,我有一个登录表单,我想设置一个错误,说电子邮件或密码无效。不过,我仍然想要在emailpassword字段为空时突出显示。

在Rails中,您可以通过向errors[:base]添加条目来实现。在Ecto中是否有等价物?

1 个答案:

答案 0 :(得分:13)

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")