Spec-Zone.ru › Ruby on Rails 8.1

module ActiveModel::Validations::HelperMethods

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

validates_absence_of (*attr_names) Показать исходный код
# File activemodel/lib/active_model/validations/absence.rb, line 28
def validates_absence_of(*attr_names)
  validates_with AbsenceValidator, _merge_attributes(attr_names)
end

Проверяет, что указанные атрибуты пусты (согласно определению Object#present?).

class Person < ActiveRecord::Base
  validates_absence_of :first_name
end

Атрибут first_name должен присутствовать в объекте и быть пустым.

Параметры конфигурации:

  • :message — пользовательское сообщение об ошибке (по умолчанию: «должно быть пустым»).

Также существует список параметров по умолчанию, поддерживаемых каждым валидатором: :if, :unless, :on, :allow_nil, :allow_blank и :strict. Дополнительные сведения см. в разделе ActiveModel::Validations::ClassMethods#validates.

validates_acceptance_of (*attr_names) Показать исходный код
# File activemodel/lib/active_model/validations/acceptance.rb, line 108
def validates_acceptance_of(*attr_names)
  validates_with AcceptanceValidator, _merge_attributes(attr_names)
end

Инкапсулирует проверку согласия с условиями обслуживания при помощи флажка (или аналогичного соглашения).

class Person < ActiveRecord::Base
  validates_acceptance_of :terms_of_service
  validates_acceptance_of :eula, message: 'must be abided'
end

Если столбца в базе данных нет, атрибут terms_of_service является полностью виртуальным. Проверка выполняется, только если terms_of_service не равно nil.

Параметры конфигурации:

  • :message — пользовательское сообщение об ошибке (по умолчанию: «должно быть принято»).

  • :accept — задаёт значение, которое считается подтверждением согласия. Также принимает массив допустимых значений. По умолчанию используется массив [“1”, true], что упрощает сопоставление с флажком HTML. При проверке столбца базы данных это значение следует установить в true или включить его в список допустимых, поскольку перед проверкой атрибут преобразуется из “1” в true.

Также существует список параметров по умолчанию, поддерживаемых каждым валидатором: :if, :unless, :on, :allow_nil, :allow_blank и :strict. Дополнительные сведения см. в разделе ActiveModel::Validations::ClassMethods#validates.

validates_comparison_of (*attr_names) Показать исходный код
# File activemodel/lib/active_model/validations/comparison.rb, line 85
def validates_comparison_of(*attr_names)
  validates_with ComparisonValidator, _merge_attributes(attr_names)
end

Проверяет, удовлетворяет ли значение указанного атрибута всем заданным сравнениям с другим значением, процедурой или атрибутом.

class Person < ActiveRecord::Base
  validates_comparison_of :value, greater_than: 'the sum of its parts'
end

Параметры конфигурации:

  • :message — пользовательское сообщение об ошибке (по умолчанию: «не прошло сравнение»).

  • :greater_than — задаёт, что значение должно быть больше указанного. Сообщение об ошибке по умолчанию для этого параметра: _«должно быть больше %{count}»_.

  • :greater_than_or_equal_to — задаёт, что значение должно быть больше или равно указанному. Сообщение об ошибке по умолчанию для этого параметра: _«должно быть больше или равно %{count}»_.

  • :equal_to — задаёт, что значение должно быть равно указанному. Сообщение об ошибке по умолчанию для этого параметра: _«должно быть равно %{count}»_.

  • :less_than — задаёт, что значение должно быть меньше указанного. Сообщение об ошибке по умолчанию для этого параметра: _«должно быть меньше %{count}»_.

  • :less_than_or_equal_to — задаёт, что значение должно быть меньше или равно указанному. Сообщение об ошибке по умолчанию для этого параметра: _«должно быть меньше или равно %{count}»_.

  • :other_than — задаёт, что значение не должно быть равно указанному. Сообщение об ошибке по умолчанию для этого параметра: _«должно отличаться от %{count}»_.

Также существует список параметров по умолчанию, поддерживаемых каждым валидатором: :if, :unless, :on, :allow_nil, :allow_blank и :strict. Дополнительные сведения см. в разделе ActiveModel::Validations::ClassMethods#validates.

Валидатор требует указать хотя бы одну из следующих проверок. Каждая из них принимает процедуру, значение или символ, соответствующий методу:

  • :greater_than

  • :greater_than_or_equal_to

  • :equal_to

  • :less_than

  • :less_than_or_equal_to

  • :other_than

Например:

class Person < ActiveRecord::Base
  validates_comparison_of :birth_date, less_than_or_equal_to: -> { Date.today }
  validates_comparison_of :preferred_name, other_than: :given_name, allow_nil: true
end
validates_confirmation_of (*attr_names) Показать исходный код
# File activemodel/lib/active_model/validations/confirmation.rb, line 75
def validates_confirmation_of(*attr_names)
  validates_with ConfirmationValidator, _merge_attributes(attr_names)
end

Инкапсулирует проверку совпадения пароля или адреса электронной почты с подтверждением.

Model:
  class Person < ActiveRecord::Base
    validates_confirmation_of :user_name, :password
    validates_confirmation_of :email_address,
                              message: 'should match confirmation'
  end

View:
  <%= password_field "person", "password" %>
  <%= password_field "person", "password_confirmation" %>

Добавленный атрибут password_confirmation является виртуальным: он существует только в памяти и используется для проверки пароля. Для этого проверка добавляет в модель методы доступа к атрибуту подтверждения.

ПРИМЕЧАНИЕ: проверка выполняется, только если password_confirmation не равно nil. Чтобы подтверждение было обязательным, добавьте проверку наличия атрибута подтверждения:

validates_presence_of :password_confirmation, if: :password_changed?

Параметры конфигурации:

  • :message — пользовательское сообщение об ошибке (по умолчанию: «не совпадает с %{translated_attribute_name}»).

  • :case_sensitive — проверяет точное совпадение. Игнорируется для нетекстовых столбцов (по умолчанию — true).

Также существует список параметров по умолчанию, поддерживаемых каждым валидатором: :if, :unless, :on, :allow_nil, :allow_blank и :strict. Дополнительные сведения см. в разделе ActiveModel::Validations::ClassMethods#validates.

validates_exclusion_of (*attr_names) Показать исходный код
# File activemodel/lib/active_model/validations/exclusion.rb, line 44
def validates_exclusion_of(*attr_names)
  validates_with ExclusionValidator, _merge_attributes(attr_names)
end

Проверяет, что значение указанного атрибута не входит в заданный перечислимый объект.

class Person < ActiveRecord::Base
  validates_exclusion_of :username, in: %w( admin superuser ), message: "You don't belong here"
  validates_exclusion_of :age, in: 30..60, message: 'This site is only for under 30 and over 60'
  validates_exclusion_of :format, in: %w( mov avi ), message: "extension %{value} is not allowed"
  validates_exclusion_of :password, in: ->(person) { [person.username, person.first_name] },
                         message: 'should not be the same as your username or first name'
  validates_exclusion_of :karma, in: :reserved_karmas
end

Параметры конфигурации:

  • :in — перечислимый объект элементов, к которым не должно относиться значение. Можно передать процедуру, лямбда-выражение или символ, возвращающий перечислимый объект. Если перечислимый объект представляет собой числовой диапазон, диапазон времени или даты и времени, проверка выполняется с помощью Range#cover?, в противном случае — с помощью include?. При использовании процедуры или лямбда-выражения проверяемый экземпляр передаётся в качестве аргумента.

  • :within — синоним (или псевдоним) для :in Range#cover?, в противном случае — с помощью include?.

  • :message — задаёт пользовательское сообщение об ошибке (по умолчанию: «зарезервировано»).

Также существует список параметров по умолчанию, поддерживаемых каждым валидатором: :if, :unless, :on, :allow_nil, :allow_blank и :strict. Дополнительные сведения см. в разделе ActiveModel::Validations::ClassMethods#validates.

validates_format_of (*attr_names) Показать исходный код
# File activemodel/lib/active_model/validations/format.rb, line 107
def validates_format_of(*attr_names)
  validates_with FormatValidator, _merge_attributes(attr_names)
end

Проверяет, соответствует ли значение указанного атрибута заданному формату, определённому регулярным выражением. Можно потребовать, чтобы атрибут соответствовал регулярному выражению:

class Person < ActiveRecord::Base
  validates_format_of :email, with: /\A([^@\s]+)@((?:[-a-z0-9]+\.)+[a-z]{2,})\z/i, on: :create
end

Также можно потребовать, чтобы указанный атрибут не соответствовал регулярному выражению:

class Person < ActiveRecord::Base
  validates_format_of :email, without: /NOSPAM/
end

Кроме того, можно передать процедуру или лямбда-выражение, которые определят регулярное выражение для проверки атрибута.

class Person < ActiveRecord::Base
  # Admin can have number as a first letter in their screen name
  validates_format_of :screen_name,
                      with: ->(person) { person.admin? ? /\A[a-z0-9][a-z0-9_\-]*\z/i : /\A[a-z][a-z0-9_\-]*\z/i }
end

Примечание: используйте \A и \z для поиска начала и конца строки; ^ и $ соответствуют началу и концу строки текста.

Из-за частого неправильного использования ^ и $ при применении любого из этих двух якорей в переданном регулярном выражении необходимо указать параметр multiline: true. В большинстве случаев следует использовать \A и \z.

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

Параметры конфигурации:

  • :message — пользовательское сообщение об ошибке (по умолчанию: «недопустимо»).

  • :with — регулярное выражение, совпадение с которым обеспечивает успешную проверку атрибута. Можно передать процедуру или лямбда-выражение, возвращающее регулярное выражение, которое будет вызвано во время выполнения.

  • :without — регулярное выражение, несовпадение с которым обеспечивает успешную проверку атрибута. Можно передать процедуру или лямбда-выражение, возвращающее регулярное выражение, которое будет вызвано во время выполнения.

  • :multiline — установите значение true, если регулярное выражение содержит якоря, соответствующие началу или концу строк, а не началу или концу всей строки. Это якоря ^ и $.

Также существует список параметров по умолчанию, поддерживаемых каждым валидатором: :if, :unless, :on, :allow_nil, :allow_blank и :strict. Дополнительные сведения см. в разделе ActiveModel::Validations::ClassMethods#validates.

validates_inclusion_of (*attr_names) Показать исходный код
# File activemodel/lib/active_model/validations/inclusion.rb, line 42
def validates_inclusion_of(*attr_names)
  validates_with InclusionValidator, _merge_attributes(attr_names)
end

Проверяет, входит ли значение указанного атрибута в заданный перечислимый объект.

class Person < ActiveRecord::Base
  validates_inclusion_of :role, in: %w( admin contributor )
  validates_inclusion_of :age, in: 0..99
  validates_inclusion_of :format, in: %w( jpg gif png ), message: "extension %{value} is not included in the list"
  validates_inclusion_of :states, in: ->(person) { STATES[person.country] }
  validates_inclusion_of :karma, in: :available_karmas
end

Параметры конфигурации:

  • :in — перечислимый объект допустимых элементов. Можно передать процедуру, лямбда-выражение или символ, возвращающий перечислимый объект. Если перечислимый объект представляет собой числовой диапазон, диапазон времени или даты и времени, проверка выполняется с помощью Range#cover?, в противном случае — с помощью include?. При использовании процедуры или лямбда-выражения проверяемый экземпляр передаётся в качестве аргумента.

  • :within — синоним (или псевдоним) для :in

  • :message — задаёт пользовательское сообщение об ошибке (по умолчанию: «не входит в список»).

Также существует список параметров по умолчанию, поддерживаемых каждым валидатором: :if, :unless, :on, :allow_nil, :allow_blank и :strict. Дополнительные сведения см. в разделе ActiveModel::Validations::ClassMethods#validates.

validates_length_of (*attr_names) Показать исходный код
# File activemodel/lib/active_model/validations/length.rb, line 123
def validates_length_of(*attr_names)
  validates_with LengthValidator, _merge_attributes(attr_names)
end

Проверяет, соответствуют ли указанные атрибуты заданным ограничениям длины. Одновременно можно использовать только один параметр ограничения, за исключением :minimum и :maximum, которые можно сочетать:

class Person < ActiveRecord::Base
  validates_length_of :first_name, maximum: 30
  validates_length_of :last_name, maximum: 30, message: "less than 30 if you don't mind"
  validates_length_of :fax, in: 7..32, allow_nil: true
  validates_length_of :phone, in: 7..32, allow_blank: true
  validates_length_of :user_name, within: 6..20, too_long: 'pick a shorter name', too_short: 'pick a longer name'
  validates_length_of :zip_code, minimum: 5, too_short: 'please enter at least 5 characters'
  validates_length_of :smurf_leader, is: 4, message: "papa is spelled with 4 characters... don't play me."
  validates_length_of :words_in_essay, minimum: 100, too_short: 'Your essay must be at least 100 words.'

  private
    def words_in_essay
      essay.scan(/\w+/)
    end
end

Параметры ограничения:

  • :minimum — минимальный размер атрибута.

  • :maximum — максимальный размер атрибута. По умолчанию допускает nil, если не используется вместе с :minimum.

  • :is — точный размер атрибута.

  • :within — диапазон, задающий минимальный и максимальный размер атрибута.

  • :in — синоним (или псевдоним) для :within.

Другие параметры:

  • :allow_nil — атрибут может быть nil; проверка пропускается.

  • :allow_blank — атрибут может быть пустым; проверка пропускается.

  • :too_long — сообщение об ошибке, если атрибут превышает максимальный размер (по умолчанию: «слишком длинный (максимум — %{count} символов)»).

  • :too_short — сообщение об ошибке, если атрибут меньше минимального размера (по умолчанию: «слишком короткий (минимум — %{count} символов)»).

  • :wrong_length — сообщение об ошибке при использовании метода :is, если размер атрибута неверен (по умолчанию: «неверная длина (должно быть %{count} символов)»).

  • :message — сообщение об ошибке для нарушения :minimum, :maximum или :is. Псевдоним соответствующего сообщения too_long/too_short/wrong_length.

Также существует список параметров по умолчанию, поддерживаемых каждым валидатором: :if, :unless, :on и :strict. Дополнительные сведения см. в разделе ActiveModel::Validations::ClassMethods#validates.

Также имеет псевдоним: validates_size_of
validates_numericality_of (*attr_names) Показать исходный код
# File activemodel/lib/active_model/validations/numericality.rb, line 217
def validates_numericality_of(*attr_names)
  validates_with NumericalityValidator, _merge_attributes(attr_names)
end

Проверяет, является ли значение указанного атрибута числовым: пытается преобразовать его во число с плавающей точкой с помощью Kernel.Float (если only_integer равно false) или проверяет его регулярным выражением /\A[+\-]?\d+\z/ (если only_integer установлено в true). Для значений Kernel.Float гарантируется точность до 15 цифр.

class Person < ActiveRecord::Base
  validates_numericality_of :value, on: :create
end

Параметры конфигурации:

  • :message — пользовательское сообщение об ошибке (по умолчанию: «не является числом»).

  • :only_integer — указывает, должно ли значение быть целым числом (по умолчанию — false).

  • :only_numeric — указывает, должно ли значение быть экземпляром Numeric (по умолчанию — false). По умолчанию предпринимается попытка разобрать значение, если оно является String.

  • :allow_nil — пропускать проверку, если атрибут равен nil (по умолчанию — false). Обратите внимание, что для столбцов типа Integer и Float пустые строки преобразуются в nil.

  • :greater_than — задаёт, что значение должно быть больше указанного. Сообщение об ошибке по умолчанию для этого параметра: _«должно быть больше %{count}»_.

  • :greater_than_or_equal_to — задаёт, что значение должно быть больше или равно указанному. Сообщение об ошибке по умолчанию для этого параметра: _«должно быть больше или равно %{count}»_.

  • :equal_to — задаёт, что значение должно быть равно указанному. Сообщение об ошибке по умолчанию для этого параметра: _«должно быть равно %{count}»_.

  • :less_than — задаёт, что значение должно быть меньше указанного. Сообщение об ошибке по умолчанию для этого параметра: _«должно быть меньше %{count}»_.

  • :less_than_or_equal_to — задаёт, что значение должно быть меньше или равно указанному. Сообщение об ошибке по умолчанию для этого параметра: _«должно быть меньше или равно %{count}»_.

  • :other_than — задаёт, что значение должно отличаться от указанного. Сообщение об ошибке по умолчанию для этого параметра: _«должно отличаться от %{count}»_.

  • :odd — задаёт, что значение должно быть нечётным числом. Сообщение об ошибке по умолчанию для этого параметра: _«должно быть нечётным»_.

  • :even — задаёт, что значение должно быть чётным числом. Сообщение об ошибке по умолчанию для этого параметра: _«должно быть чётным»_.

  • :in — проверяет, входит ли значение в диапазон. Сообщение об ошибке по умолчанию для этого параметра: _«должно входить в %{count}»_.

Также существует список параметров по умолчанию, поддерживаемых каждым валидатором: :if, :unless, :on, :allow_nil, :allow_blank и :strict. Дополнительные сведения см. в разделе ActiveModel::Validations::ClassMethods#validates.

Следующие проверки также можно передать в виде процедуры или символа, соответствующего методу:

  • :greater_than

  • :greater_than_or_equal_to

  • :equal_to

  • :less_than

  • :less_than_or_equal_to

  • :only_integer

  • :other_than

Например:

class Person < ActiveRecord::Base
  validates_numericality_of :width, less_than: ->(person) { person.height }
  validates_numericality_of :width, greater_than: :minimum_weight
end
validates_presence_of (*attr_names) Показать исходный код
# File activemodel/lib/active_model/validations/presence.rb, line 34
def validates_presence_of(*attr_names)
  validates_with PresenceValidator, _merge_attributes(attr_names)
end

Проверяет, что указанные атрибуты не пусты (согласно определению Object#blank?).

class Person < ActiveRecord::Base
  validates_presence_of :first_name
end

Атрибут first_name должен присутствовать в объекте и не может быть пустым.

Для проверки наличия логического поля (допустимые значения которого — true и false) следует использовать validates_inclusion_of :field_name, in: [true, false].

Это связано с тем, как Object#blank? обрабатывает логические значения: false.blank? # => true.

Параметры конфигурации:

  • :message — пользовательское сообщение об ошибке (по умолчанию: «не может быть пустым»).

Также существует список параметров по умолчанию, поддерживаемых каждым валидатором: :if, :unless, :on, :allow_nil, :allow_blank и :strict. Дополнительные сведения см. в разделе ActiveModel::Validations::ClassMethods#validates.

validates_size_of (*attr_names)
Псевдоним для: validates_length_of

© 2004–2021 David Heinemeier Hansson
Licensed under the MIT License.

Spec-Zone.ru

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