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

Mar*_*nos 8 elixir ecto phoenix-framework

我想在Ecto.Changeset上设置一个非特定于字段的错误.

在我的情况下,我有一个登录表单,我想设置一个错误,说电子邮件或密码无效.但是我还是想在它们为空时突出显示emailpassword字段.

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

Dog*_*ert 16

Ecto.Changeset.add_error允许您传递任何原子作为键,它不必是该模型的字段.您可以将错误添加到:base这样:

add_error(changeset, :base, "email or password is invalid")
Run Code Online (Sandbox Code Playgroud)

然后在你的模板中,做到:

<%= error_tag f, :base %>
Run Code Online (Sandbox Code Playgroud)

或(检查是否有错误):

<%= @changeset.errors[:base] %>
Run Code Online (Sandbox Code Playgroud)

您的用例的另一个选项是在:email和两者上添加错误:password

changeset
|> add_error(:email, "email or password is invalid")
|> add_error(:password, "email or password is invalid")
Run Code Online (Sandbox Code Playgroud)