модуль ActiveModel::Validations
Валидация Active Model
Предоставляет полную систему валидации для ваших объектов.
Минимальная реализация может быть следующей:
class Person
include ActiveModel::Validations
attr_accessor :first_name, :last_name
validates_each :first_name, :last_name do |record, attr, value|
record.errors.add attr, 'starts with z.' if value.to_s[0] == ?z
end
end
Что предоставляет вам полную стандартную систему валидации, известную по Active Record:
person = Person.new
person.valid? # => true
person.invalid? # => false
person.first_name = 'zoolander'
person.valid? # => false
person.invalid? # => true
person.errors.messages # => {first_name:["starts with z."]}
Обратите внимание, что ActiveModel::Validations автоматически добавляет метод errors к вашим экземплярам, инициализированным с новым объектом ActiveModel::Errors, поэтому вам не нужно делать это вручную.
Валидатор длины Active Model Validator
Публичные методы экземпляров
# File activemodel/lib/active_model/validations.rb, line 300 def errors @errors ||= Errors.new(self) end
Возвращает объект Errors, содержащий всю информацию об ошибках атрибутов.
class Person
include ActiveModel::Validations
attr_accessor :name
validates_presence_of :name
end
person = Person.new
person.valid? # => false
person.errors # => #<ActiveModel::Errors:0x007fe603816640 @messages={name:["can't be blank"]}>
# File activemodel/lib/active_model/validations.rb, line 374 def invalid?(context = nil) !valid?(context) end
Выполняет противоположное действию valid?. Возвращает true, если были добавлены ошибки, и false, в противном случае.
class Person include ActiveModel::Validations attr_accessor :name validates_presence_of :name end person = Person.new person.name = '' person.invalid? # => true person.name = 'david' person.invalid? # => false
Контекст можно необязательно указать, чтобы определить, какие колбэки следует проверить (контекст определен для валидаций с помощью :on).
class Person include ActiveModel::Validations attr_accessor :name validates_presence_of :name, on: :new end person = Person.new person.invalid? # => false person.invalid?(:new) # => true
# File activemodel/lib/active_model/validations.rb, line 335 def valid?(context = nil) current_context, self.validation_context = validation_context, context errors.clear run_validations! ensure self.validation_context = current_context end
Выполняет все указанные валидации и возвращает true, если ошибки не были добавлены, иначе false.
Алиас для validate.
class Person include ActiveModel::Validations attr_accessor :name validates_presence_of :name end person = Person.new person.name = '' person.valid? # => false person.name = 'david' person.valid? # => true
Контекст можно необязательно указать, чтобы определить, какие колбэки следует проверить (контекст определен для валидаций с помощью :on).
class Person include ActiveModel::Validations attr_accessor :name validates_presence_of :name, on: :new end person = Person.new person.valid? # => true person.valid?(:new) # => false
# File activemodel/lib/active_model/validations/with.rb, line 143
def validates_with(*args, &block)
options = args.extract_options!
options[:class] = self.class
args.each do |klass|
validator = klass.new(options, &block)
validator.validate(self)
end
end Передает запись классу или классам, указанным в списке, и позволяет им добавлять ошибки на основе более сложных условий.
class Person
include ActiveModel::Validations
validate :instance_validations
def instance_validations
validates_with MyValidator
end
end
Для получения дополнительной информации о создании собственного валидатора, пожалуйста, обратитесь к документации метода класса.
Вы также можете передать несколько классов, например:
class Person
include ActiveModel::Validations
validate :instance_validations, on: :create
def instance_validations
validates_with MyValidator, MyOtherValidator
end
end
Стандартные параметры конфигурации (:on, :if и :unless ), доступные в методе класса validates_with, должны быть вместо этого размещены в методе validates, так как они применяются и проверяются в колбэке.
Если вы передадите любые дополнительные параметры конфигурации, они будут переданы классу и доступны как options. Подробнее см. в версии метода класса.
© 2004–2018 David Heinemeier Hansson
Licensed under the MIT License.