класс ActiveModel::EachValidator
Active Model EachValidator
EachValidator — это валидатор, который итерируется по атрибутам, заданным в хэше опций, вызывая метод validate_each, передавая в него запись, атрибут и значение.
Все валидации Active Model построены на основе этого валидатора.
Атрибуты
Публичные методы класса
# 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
Возвращает новый экземпляр валидатора. Все опции будут доступны через читатель options, однако опция :attributes будет удалена, и вместо неё станет доступна через читатель attributes.
ActiveModel::Validator::new Публичные методы экземпляра
# File activemodel/lib/active_model/validator.rb, line 168 def check_validity! end
Метод-обработчик, вызываемый инициализатором, позволяющий проверить, являются ли предоставленные аргументы валидными. Например, вы можете вызвать исключение ArgumentError при предоставлении недопустимых опций.
# 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 Выполняет валидацию предоставленной записи. По умолчанию это вызовет validate_each, чтобы определить валидность, поэтому подклассы должны переопределить validate_each с логикой валидации.
# 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
Переопределите этот метод в подклассах с логикой валидации, добавляя ошибки в массив errors записи по мере необходимости.
© 2004–2021 David Heinemeier Hansson
Licensed under the MIT License.