如何在Phoenix框架中为必填字段添加自定义错误消息

NoD*_*ame 5 elixir phoenix-framework

如何更改必填字段的错误消息?如果我有类似的东西

@required_fields ~w(name email)
Run Code Online (Sandbox Code Playgroud)

我想显示"没有办法是空的",而不是默认值"不能为空"?

Gja*_*don 8

此时"can't be blank"错误消息被硬编码到Ecto中.但是,您可以通过执行以下操作替换此错误消息:

def changeset(model, params \\ :empty) do
  model
  |> cast(params, @required_fields, @optional_fields)
  |> required_error_messages("no way it's empty")
end

def required_error_messages(changeset, new_error_message) do
  update_in changeset.errors, &Enum.map(&1, fn
    {key, "can't be blank"} -> {key, new_error_message}
    {_key, _error} = tuple  -> tuple
  end)
end
Run Code Online (Sandbox Code Playgroud)

希望有所帮助!


小智 6

我通常这样定制:

validate_required(changeset, [:email], message: "Email cannot be blank.")
Run Code Online (Sandbox Code Playgroud)

  • 这是行不通的,错误消息会显示为“电子邮件电子邮件不能为空”。您只能更改结尾,并且它总是在前面(和小写)添加字段名称。 (2认同)