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.
- C
- N
- V
[R] | attributes |
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: show
# File activemodel/lib/active_model/validator.rb, line 139 def initialize(options) @attributes = Array.wrap(options.delete(:attributes)) raise ":attributes cannot be blank" if @attributes.empty? super check_validity! end
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: show
# File activemodel/lib/active_model/validator.rb, line 166 def check_validity! end
Performs validation on the supplied record. By default this will call
validates_each
to determine validity therefore subclasses
should override validates_each
with validation logic.
Source: show
# File activemodel/lib/active_model/validator.rb, line 149 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]) validate_each(record, attribute, value) end end
Override this method in subclasses with the validation logic, adding errors
to the records errors
array where necessary.
Source: show
# File activemodel/lib/active_model/validator.rb, line 159 def validate_each(record, attribute, value) raise NotImplementedError, "Subclasses must implement a validate_each(record, attribute, value) method" end