【问题标题】:Customize Rails Validation Message (Do not show attribute name) Rails 4自定义 Rails 验证消息(不显示属性名称)Rails 4
【发布时间】:2014-08-27 14:50:13
【问题描述】:

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

我有这个验证:

validates_confirmation_of :password, if: :password_required?, message: I18n.t('password_confirmation.confimation')

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

所以,我得到的密码无效:“确认密码密码应该匹配”

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

【问题讨论】:

  • 如何从您的消息中删除“密码”一词?然后错误消息将是“确认密码应该匹配”。
  • 这是一个很好的解决方法,但不能回答我的问题。这是一种情况,但在其他情况下,我不希望字段名称出现在验证消息中。
  • 你想只收到“密码应该匹配”的消息吗?
  • 是的。我希望消息是我指定的消息。没有属性名称。
  • 看一下代码:github.com/rails/rails/blob/master/activemodel/lib/active_model/… 完整的错误信息是一个带有属性和消息的字符串。如果没有猴子补丁,您将无法修改它。在这种情况下,最好的方法是创建自定义方法验证并将错误消息添加到 :base 属性:guides.rubyonrails.org/…

标签: ruby-on-rails ruby internationalization


【解决方案1】:

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

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

en:
  errors:
    format: "%{message}"

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

更新

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

【讨论】:

  • 是的,这设置了所有验证消息的格式。我编辑了我的答案以寻找可能的替代方案。
猜你喜欢
  • 2016-03-24
  • 1970-01-01
  • 1970-01-01
  • 2011-10-21
  • 2014-11-16
  • 1970-01-01
  • 1970-01-01
  • 2011-07-20
  • 1970-01-01
相关资源
最近更新 更多