自定义 Rails 验证消息(不显示属性名称)Rails 4

lcg*_*ida 4 ruby ruby-on-rails internationalization

我正在尝试在 Rails 中编写自定义验证消息。

我有这个验证:

validates_confirmation_of :password, if: :password_required?, message: I18n.t('password_confirmation.confimation')
Run Code Online (Sandbox Code Playgroud)

问题是:Rails 将属性名称放在消息前面。

因此,在我收到的无效密码上:“确认密码密码应该匹配”

如何去掉消息前面的属性名称?

kof*_*rei 5

您可以在语言环境 yml 文件中自定义错误消息的格式。只需将您自己的格式添加到您的项目中。

例如在文件config/locales/en.yml 中

en:
  errors:
    format: "%{message}"
Run Code Online (Sandbox Code Playgroud)

有关原始格式,请参阅https://github.com/rails/rails/blob/master/activemodel/lib/active_model/locale/en.yml#L4

更新

如果您不想全局更改格式并仅针对这种情况显示特定消息,您应该在视图中处理它。我不知道你究竟是如何显示错误的。如果你以某种方式使用errors.full_messages你不应该在这种情况下,它添加了格式前缀。例如,您可以编写一个仅直接获取错误的帮助程序 ( @your_model.errors[:email]) 并自己构建所需的输出。