Active Model EachValidator

EachValidator is a validator which iterates through the attributes given in the options hash invoking the validate_each method passing in the record, attribute, and value.

All Active Model validations are built on top of this validator.

Methods

Attributes

[R] attributes

Class Public methods

new(options)

Returns a new validator instance. All options will be available via the options reader, however the :attributes option will be removed and instead be made available through the attributes reader.

📝 Source code
# File activemodel/lib/active_model/validator.rb, line 140
    def initialize(options)
      @attributes = Array(options.delete(:attributes))
      raise ArgumentError, ":attributes cannot be blank" if @attributes.empty?
      super
      check_validity!
    end
🔎 See on GitHub

Instance Public methods

check_validity!()

Hook method that gets called by the initializer allowing verification that the arguments supplied are valid. You could for example raise an ArgumentError when invalid options are supplied.

📝 Source code
# File activemodel/lib/active_model/validator.rb, line 168
    def check_validity!
    end
🔎 See on GitHub

validate(record)

Performs validation on the supplied record. By default this will call validate_each to determine validity therefore subclasses should override validate_each with validation logic.

📝 Source code
# File activemodel/lib/active_model/validator.rb, line 150
    def validate(record)
      attributes.each do |attribute|
        value = record.read_attribute_for_validation(attribute)
        next if (value.nil? && options[:allow_nil]) || (value.blank? && options[:allow_blank])
        value = prepare_value_for_validation(value, record, attribute)
        validate_each(record, attribute, value)
      end
    end
🔎 See on GitHub

validate_each(record, attribute, value)

Override this method in subclasses with the validation logic, adding errors to the records errors array where necessary.

📝 Source code
# File activemodel/lib/active_model/validator.rb, line 161
    def validate_each(record, attribute, value)
      raise NotImplementedError, "Subclasses must implement a validate_each(record, attribute, value) method"
    end
🔎 See on GitHub