如何向 Ecto 变更集添加全局错误

How to add a global error to an Ecto Changeset

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

在我的例子中,我有一个登录表单,我想设置一个错误,指出电子邮件或密码无效。但是我仍然想在 emailpassword 字段为空时突出显示它们。

在 Rails 中,您可以通过向 errors[:base] 添加一个条目来实现。 Ecto 中有等效项吗?

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