rails中不同形式的验证方法

时间:2012-01-10 00:27:37

标签: ruby-on-rails

根据rails的内置验证功能,以下两种方法有什么区别?

validates :password, :confirmation =>true

validates_confirmation_of :password

据我所知,第一个刚刚在rails 3中引入? 我是对的吗?

1 个答案:

答案 0 :(得分:1)

他们都做同样的事情,validates_confirmation_of只是validates的许多简短形式辅助方法之一。

如果您查看来源,可以看到validates方法只是为了处理所有验证程序,而validates_confirmation_of明确使用ConfirmationValidator

我认为validates_confirmation_of是在Rails 2中引入的,所以它已经存在了很长一段时间。

来源比较:

  def validates_confirmation_of(*attr_names)
    validates_with ConfirmationValidator, _merge_attributes(attr_names)
  end

  def validates(*attributes)
    defaults = attributes.extract_options!
    validations = defaults.slice!(*_validates_default_keys)

    raise ArgumentError, "You need to supply at least one attribute" if attributes.empty?
    raise ArgumentError, "You need to supply at least one validation" if validations.empty?

    defaults.merge!(:attributes => attributes)

    validations.each do |key, options|
      # LOOK AT THIS LINE
      key = "#{key.to_s.camelize}Validator"

      begin
        validator = key.include?('::') ? key.constantize : const_get(key)
      rescue NameError
        raise ArgumentError, "Unknown validator: '#{key}'"
      end

      # AND LOOK AT THIS LINE
      validates_with(validator, defaults.merge(_parse_validates_options(options)))
    end
  end