модуль ActiveModel::Validations::HelperMethods
Публичные методы экземпляров
# 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 для получения дополнительной информации
# 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 для получения дополнительной информации.
# 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 для получения дополнительной информации
# 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- синоним (или псевдоним) для:inRange#cover?, в противном случае сinclude?. -
:message- указывает пользовательское сообщение об ошибке (по умолчанию: «зарезервировано»).
Также существует список параметров по умолчанию, поддерживаемых каждым валидатором: :if, :unless, :on, :allow_nil, :allow_blank, и :strict. См. ActiveModel::Validations#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
Можно также предоставить 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 для получения дополнительной информации
# 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 для получения дополнительной информации
# 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
# 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
# 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
© 2004–2020 David Heinemeier Hansson
Licensed under the MIT License.