Spec-Zone.ru › Ruby on Rails 7.0

класс ActiveModel::EachValidator

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

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

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

Атрибуты

attributes[R]

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

new(options) Показать исходный код
# File activemodel/lib/active_model/validator.rb, line 138
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 166
def check_validity!
end

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

validate(record) Показать исходный код
# File activemodel/lib/active_model/validator.rb, line 148
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 159
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