【问题标题】:How to add a global error to an Ecto Changeset如何将全局错误添加到 Ecto Changeset
【发布时间】:2023-03-28 07:50:01
【问题描述】:
我想在不特定于某个字段的 Ecto.Changeset 上设置错误。
就我而言,我有一个登录表单,我想设置一个错误,说明电子邮件或密码无效。但是,当它们为空时,我仍然想突出显示 email 或 password 字段。
在 Rails 中,您可以通过向 errors[:base] 添加一个条目来做到这一点。 Ecto 中是否有等价物?
【问题讨论】:
标签:
elixir
phoenix-framework
ecto
【解决方案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")