ActiveRecord验证:在语言环境

时间:2017-09-20 15:02:52

标签: ruby-on-rails ruby rails-activerecord rails-i18n

我尝试使用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会被添加到我的错误消息中?我怎样才能避免这种行为?

3 个答案:

答案 0 :(得分:2)

你可以添加:

errors:
  format: "%{message}"

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

修改:这应该添加到config/locales/fr.yml而非config/locales/activerecord.fr.yml(也有errors:

答案 1 :(得分:1)

找到一个可以解决您目的的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

答案 2 :(得分:1)

你可以简单地使用:

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