ActiveRecord 验证:将字符串添加到语言环境中的错误消息

ActiveRecord Validations : String added to error message in locales

我正在尝试使用 i18n 自定义验证错误消息。

假设我有一个验证 zip_code.
是否存在的地址模型 我的 config/locales/activerecord.fr.yml 看起来像这样

fr:
  activerecord:
    errors:
      models:
        address:
          attributes:
            civility:
              blank: "Some message"

如果我未通过验证,我在 @address.errors.full_messages 中收到的错误消息将是:

"Zip code Some message"

为什么 Zip code 会添加到我的错误消息中?我怎样才能避免这种行为?

您只需添加:

errors:
  format: "%{message}"

这样您将只显示没有属性名称的错误消息。

编辑:这应该添加到 config/locales/fr.yml 而不是 config/locales/activerecord.fr.yml(它也有 errors:

找到一个 gem 可以解决您的问题

借助此 gem,您只需要使用插入符号启动语言环境消息,它不应在消息中显示属性名称。

模型定义为:

class Item < ApplicationRecord
  validates :name, presence: true
end

与以下 en.yml:

en:
  activerecord:
    errors:
      models:
        item:
          attributes:
            name:
              blank: "^You can't create an item without a name."

item.errors.full_messages 将显示:

#You can't create an item without a name

而不是通常的

#Name You can't create an item without a name

您可以简单地使用:

@address.errors.messages[:zip_code] # or @address.errors[:zip_code]
#=> ['Some message']