Rails 4自定义验证器澄清

时间:2014-04-08 20:10:21

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

我在导轨指南(http://guides.rubyonrails.org/active_record_validations.html#performing-custom-validations)中进行了自定义验证,我很难理解这里发生了什么。如何使用EmailValidator?它在哪里被召唤?

class EmailValidator < ActiveModel::EachValidator
  def validate_each(record, attribute, value)
    unless value =~ /\A([^@\s]+)@((?:[-a-z0-9]+\.)+[a-z]{2,})\z/i
      record.errors[attribute] << (options[:message] || "is not an email")
    end
  end
end

class Person < ActiveRecord::Base
  validates :email, presence: true, email: true
end

就像所有代码在哪里一样?

1 个答案:

答案 0 :(得分:3)

执行传递哈希的validates方法。当传递散列时,此方法对其进行迭代,并且对于每个键,它实例化验证器,该名称与给定键匹配。因此,如果您传递presence: true,它会实例化PresenceValidator的新实例,同样confirmation: true实例化ConfirmationValidator。如果不是true,则值是散列,它将被传递给验证器并存储在实例变量@options中,由options读取器访问。