method
validate_each
v5.0.0.1 -
Show latest stable
- Class:
ActiveModel::Validations::NumericalityValidator
validate_each(record, attr_name, value)public
No documentation available.
# File activemodel/lib/active_model/validations/numericality.rb, line 20
def validate_each(record, attr_name, value)
before_type_cast = :"#{attr_name}_before_type_cast"
raw_value = record.send(before_type_cast) if record.respond_to?(before_type_cast) && record.send(before_type_cast) != value
raw_value ||= value
if record_attribute_changed_in_place?(record, attr_name)
raw_value = value
end
return if options[:allow_nil] && raw_value.nil?
unless is_number?(raw_value)
record.errors.add(attr_name, :not_a_number, filtered_options(raw_value))
return
end
if allow_only_integer?(record) && !is_integer?(raw_value)
record.errors.add(attr_name, :not_an_integer, filtered_options(raw_value))
return
end
unless raw_value.is_a?(Numeric)
value = parse_raw_value_as_a_number(raw_value)
end
options.slice(*CHECKS.keys).each do |option, option_value|
case option
when :odd, :even
unless value.to_i.send(CHECKS[option])
record.errors.add(attr_name, option, filtered_options(value))
end
else
case option_value
when Proc
option_value = option_value.call(record)
when Symbol
option_value = record.send(option_value)
end
unless value.send(CHECKS[option], option_value)
record.errors.add(attr_name, option, filtered_options(value).merge!(count: option_value))
end
end
end
end