модуль ActiveModel::Validations::HelperMethods
Публичные методы экземпляров
# File activemodel/lib/active_model/validations/absence.rb, line 26 def validates_absence_of(*attr_names) validates_with AbsenceValidator, _merge_attributes(attr_names) end
Проверяет, что указанные атрибуты пусты (как определено в Object#blank?). Происходит по умолчанию при сохранении.
class Person < ActiveRecord::Base validates_absence_of :first_name end
Атрибут first_name должен присутствовать в объекте и быть пустым.
Параметры конфигурации:
-
:message— пользовательское сообщение об ошибке (по умолчанию: «должен быть пустым»).
Также есть список параметров по умолчанию, поддерживаемых каждым валидатором: :if, :unless, :on, :allow_nil, :allow_blank, и :strict. Дополнительная информация в ActiveModel::Validation#validates
# File activemodel/lib/active_model/validations/acceptance.rb, line 50 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», что облегчает связь с HTML-флагом. Это нужно установить вtrue, если вы проверяете столбец базы данных, так как атрибут приводится к типуtrueперед валидацией.
Также есть список параметров по умолчанию, поддерживаемых каждым валидатором: :if, :unless, :on, :allow_nil, :allow_blank, и :strict. Дополнительная информация в ActiveModel::Validation#validates
# File activemodel/lib/active_model/validations/confirmation.rb, line 62 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}»).
Также есть список параметров по умолчанию, поддерживаемых каждым валидатором: :if, :unless, :on, :allow_nil, :allow_blank, и :strict. Дополнительная информация в ActiveModel::Validation#validates
# File activemodel/lib/active_model/validations/exclusion.rb, line 41 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— перечислимый объект элементов, которых значение не должно содержать. Может быть передан как процедура, лямбда или символ, возвращающий перечислимый объект. Если перечислимый объект — диапазон, проверка выполняется с -
:within— синоним (или псевдоним) для:inRange#cover?, в противном случае сinclude? -
:message— пользовательское сообщение об ошибке (по умолчанию: «зарезервировано»).
Также есть список параметров по умолчанию, поддерживаемых каждым валидатором: :if, :unless, :on, :allow_nil, :allow_blank, и :strict. Дополнительная информация в ActiveModel::Validation#validates
# 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
Также можно указать процедуру или лямбда-функцию, которая определит регулярное выражение, используемое для проверки атрибута.
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::Validation#validates
# File activemodel/lib/active_model/validations/inclusion.rb, line 41 def validates_inclusion_of(*attr_names) validates_with InclusionValidator, _merge_attributes(attr_names) end
Проверяет, содержится ли значение указанного атрибута в определенном перечислимом объекте.
class Person < ActiveRecord::Base
validates_inclusion_of :gender, in: %w( m f )
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::Validation#validates
# File activemodel/lib/active_model/validations/length.rb, line 119 def validates_length_of(*attr_names) validates_with LengthValidator, _merge_attributes(attr_names) end
Проверяет, что указанный атрибут соответствует ограничениям длины. Одновременно может быть использовано только одно ограничение:
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 :essay, minimum: 100, too_short: 'Your essay must be at least 100 words.',
tokenizer: ->(str) { str.scan(/\w+/) }
end
Настройки:
-
:minimum- Минимальная длина атрибута. -
:maximum- Максимальная длина атрибута. По умолчанию допускает любое значение, если не используется :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. -
:tokenizer- Указывает, как разделить строку атрибута. (например,tokenizer: ->(str) { str.scan(/\w+/) }для подсчета слов, как в примере выше). По умолчанию->(value) { value.split(//) }, что подсчитывает отдельные символы.
Также поддерживается список параметров по умолчанию для всех валидаторов: :if, :unless, :on и :strict. Подробнее см. ActiveModel::Validation#validates
# File activemodel/lib/active_model/validations/numericality.rb, line 154 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).
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::Validation#validates
Следующие проверки также могут быть заданы с помощью блока кода или символа, соответствующего методу:
-
:greater_than -
:greater_than_or_equal_to -
:equal_to -
:less_than -
:less_than_or_equal_to -
:only_integer
Например:
class Person < ActiveRecord::Base
validates_numericality_of :width, less_than: ->(person) { person.height }
validates_numericality_of :width, greater_than: :minimum_weight
end
# 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::Validation#validates
© 2004–2018 David Heinemeier Hansson
Licensed under the MIT License.