Spec-Zone.ru › Ruby on Rails 7.2

class 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