使用en.yml文件的Rails自定义验证错误

时间:2013-06-26 13:05:26

标签: ruby-on-rails validation

我有一个模型user_input.rb

class UserInput
  include ActiveModel::Validations
  include ActiveModel::Conversion
  extend ActiveModel::Naming

  # attributes
  attr_accessor :patientNum, :recordLimit
  validates_presence_of :patientNum

  validates :patientNum, :numericality => { :only_integer => true, :greater_than_or_equal_to => 0}

  def initialize(attributes={})
    attributes.each do |name, value|
      send("#{name}=",value)
    end
  end

  def persisted?
    false
  end
end

当我收到错误消息时,我会收到

等消息

“Patientnum不是数字”

我想将Patientnum更改为“患者编号”

我当前的en.yml文件是

en:
  hello: "Hello world"

  errors:
    format: "%{message}"

  user_input:
    attributes:
      patientNum: "Patient Number"

这对我来说很棘手,因为我的模型不是ActiveRecord :: Base

2 个答案:

答案 0 :(得分:1)

  attributes:
    patientNum: "Patient ID"

答案 1 :(得分:0)

ActiveModel::Validations使用ActiveModel::Translation生成错误消息中使用的人类可读属性名称。

对于您的类和属性名称,它将按以下顺序查找以下I18n键:

  1. activemodel.attributes.user_input.patientNum
  2. attributes.patientNum
  3. 如果找不到,则会回退到默认值'patientNum'.humanize

    有关详细信息,请参阅ActiveModel::Translation#human_attribute_name的实施。