Spec-Zone.ru › Ruby on Rails 6.1

модуль 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#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#validates для получения дополнительной информации.

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#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 - перечислимый объект элементов, среди которых значение не должно быть. Может быть предоставлен как proc, лямбда или символ, возвращающий перечислимый объект. Если перечислимый объект представляет собой числовой, временной или временной диапазон, проверка выполняется с использованием Range#cover?, в противном случае с include?. При использовании proc или лямбда в качестве аргумента передается экземпляр, подлежащий валидации.

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

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

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

validates_format_of(*attr_names) Показать исходный код
# File activemodel/lib/active_model/validations/format.rb, line 108
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

Можно также предоставить proc или лямбда, которые определят регулярное выражение, используемое для проверки атрибута.

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 в качестве параметра. Кроме того, оба параметра должны быть регулярными выражениями или proc/лямбда, иначе будет вызвано исключение.

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

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

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

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

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

Также существует список параметров по умолчанию, поддерживаемых каждым валидатором: :if, :unless, :on, :allow_nil, :allow_blank, и :strict. См. ActiveModel::Validations#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 - перечислимый объект доступных элементов. Может быть предоставлен как proc, лямбда или символ, возвращающий перечислимый объект. Если перечислимый объект представляет собой числовой, временной или временной диапазон, проверка выполняется с использованием Range#cover?, в противном случае с include?. При использовании proc или лямбда в качестве аргумента передается экземпляр, подлежащий валидации.

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

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

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

END_OF_DOCUMENT_MARKER
validates_length_of(*attr_names) Показать исходный код
# File activemodel/lib/active_model/validations/length.rb, line 122
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#validates

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

Проверяет, является ли значение указанного атрибута числовым, пытаясь преобразовать его в float с помощью 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).

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

  • :greater_than - Указывает, что значение должно быть больше указанного значения.

  • :greater_than_or_equal_to - Указывает, что значение должно быть больше или равно указанному значению.

  • :equal_to - Указывает, что значение должно быть равно указанному значению.

  • :less_than - Указывает, что значение должно быть меньше указанного значения.

  • :less_than_or_equal_to - Указывает, что значение должно быть меньше или равно указанному значению.

  • :other_than - Указывает, что значение не должно быть равным указанному значению.

  • :odd - Указывает, что значение должно быть нечётным.

  • :even - Указывает, что значение должно быть чётным.

Также поддерживается список параметров по умолчанию для всех валидаторов: :if, :unless, :on, :allow_nil, :allow_blank, и :strict. Подробнее см. ActiveModel::Validations#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#validates

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

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

Spec-Zone.ru

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