Spec-Zone.ru › Ruby on Rails 7.1

класс ActiveModel::EachValidator

Родитель:
ActiveModel::Validator

Active Model EachValidator

EachValidator — это валидатор, который итерируется по атрибутам, заданным в хэше опций, вызывая метод validate_each, передавая в него запись, атрибут и значение.

Все валидации Active Model построены на основе этого валидатора.

Атрибуты

attributes[R]

Публичные методы класса

new(options) Показать исходный код
# 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

Публичные методы экземпляра

check_validity!() Показать исходный код
# File activemodel/lib/active_model/validator.rb, line 168
def check_validity!
end

Метод-обработчик, вызываемый инициализатором, позволяющий проверить, являются ли предоставленные аргументы валидными. Например, вы можете вызвать исключение ArgumentError при предоставлении недопустимых опций.

validate(record) Показать исходный код
# 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 с логикой валидации.

validate_each(record, attribute, value) Показать исходный код
# 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.

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API