Spec-Zone.ru › Ruby on Rails 8.1

класс ActiveModel::EachValidator

Родительский класс:
ActiveModel::Validator

EachValidator Active Model

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