Rails 4+:在哪里存储跨模型使用的自定义验证消息

时间:2016-05-05 21:57:02

标签: validation ruby-on-rails-4 activerecord

我有几个不同模型使用的自定义验证消息:

# models/user.rb
class Person < ActiveRecord::Base
  validates :name, presence: { message: "This is a required question" }
end

# models/pet.rb
class Pet < ActiveRecord::Base
  validates :name, presence: { message: "This is a required question" }
end

我对en.yml配置有点熟悉,但是它指定了每个模型的消息:

en:
  activerecord:
    errors:
      models:
        person:
          attributes:
            name:
              blank: "This is a required question"
        pet:
          attributes:
            name:
              blank: "This is a required question"

这看起来非常冗长,而且不适合开发人员。

我的解决方案是创建一个初始化文件并将我的自定义验证消息存储在哈希:

# config/initializers/custom_validation_messages.rb
CUSTOM_VALIDATION_MESSAGES = {
  required: "This is a required question"
}

然后将它们用作:

validates :name, presence: { message: CUSTOM_VALIDATION_MESSAGES[:required] }

我的解决方案有效,但我不确定这是否是初始化程序的正确用法。是否有更合适的Rails约定来清理那些重复的验证消息?

1 个答案:

答案 0 :(得分:1)

我更喜欢以下方法,所以我也可以在我的应用程序中的其他地方使用翻译(例如提示消息):

class Pet < ActiveRecord::Base
  validates :name, presence: { message: I18n.t('common_errors.required_question' }
end

en:
  common_errors:
    required_question: "This is a required question"