如何将列的值传递给validates的自定义错误消息

时间:2015-09-30 03:04:38

标签: ruby-on-rails model

我有一个包含2列的模型,nameanswer

如何将name的值传递给模型验证的自定义错误消息。

示例代码:

#app/models/sample_model.rb
Class SampleModel < ActiveRecord::Base
    validates :answer, 
                :presence => {:message => "Error name: #{self.name}"}
end

而不是列name的值,它显示模型的名称 SampleModel

1 个答案:

答案 0 :(得分:1)

要访问要验证的属性(列)的值,您需要使用ActiveModel::Validations类。该类有一个validates_each方法,可用于访问正在验证的记录的值。

#app/models/sample_model.rb
class SampleModel < ActiveRecord::Base
  include ActiveModel::Validations

  attr_accessor :sample_attribute

  validates_each :sample_attribute allow_blank: true do |record, attr, value|
      record.errors.add :base, 'Error name: #{value}' if value.nil?
  end
end

record.errors.add中,您可以自定义消息。它需要三个参数attributemessageoptions。在上面,我为该属性添加了:base,基本上可以自定义自定义消息。

有关validates_each方法的详细信息,请参阅here;有关Active Model Errors类中的'add'方法,请参阅here。 Rails指南中的this section也会有所帮助。