Spec-Zone.ru › Ruby on Rails 4.1

модуль ActiveModel::Validations::HelperMethods

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

validates_absence_of(*attr_names) Показать исходный код

Проверяет, что указанные атрибуты пусты (как определено в 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/absence.rb, line 26
def validates_absence_of(*attr_names)
  validates_with AbsenceValidator, _merge_attributes(attr_names)
end
validates_acceptance_of(*attr_names) Показать исходный код

Оборачивает паттерн проверки принятия условий обслуживания (или подобного соглашения).

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, если вы проверяете столбец базы данных, так как атрибут преобразуется из «1» в true перед проверкой.

Также существует список параметров по умолчанию, поддерживаемых всеми валидаторами: :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
validates_confirmation_of(*attr_names) Показать исходный код

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

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 - пользовательское сообщение об ошибке (по умолчанию: «не совпадает с подтверждением»).

Также существует список параметров по умолчанию, поддерживаемых всеми валидаторами: :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
validates_exclusion_of(*attr_names) Показать исходный код

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

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 - синоним (или псевдоним) для :in Range#cover?, в противном случае с include?.

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

Также существует список параметров по умолчанию, поддерживаемых всеми валидаторами: :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
validates_format_of(*attr_names) Показать исходный код

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

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/format.rb, line 108
def validates_format_of(*attr_names)
  validates_with FormatValidator, _merge_attributes(attr_names)
end
validates_inclusion_of(*attr_names) Показать исходный код

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

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/inclusion.rb, line 41
def validates_inclusion_of(*attr_names)
  validates_with InclusionValidator, _merge_attributes(attr_names)
end
validates_length_of(*attr_names) Показать исходный код

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

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 - Максимальный размер атрибута. По умолчанию допускает 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.

  • :tokenizer - Указывает, как разделить строку атрибута. (например, tokenizer: ->(str) { str.scan(/\w+/) }, чтобы считать слова, как в примере выше). По умолчанию ->(value) { value.split(//) }, которое считает отдельные символы.

Также поддерживается список параметров по умолчанию для всех валидаторов: :if, :unless, :on и :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
Также используется как: validates_size_of
validates_numericality_of(*attr_names) Показать исходный код

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

Например:

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/numericality.rb, line 131
def validates_numericality_of(*attr_names)
  validates_with NumericalityValidator, _merge_attributes(attr_names)
end
validates_presence_of(*attr_names) Показать исходный код

Проверяет, что указанные атрибуты не пусты (как определено в 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 для получения дополнительной информации.

# File activemodel/lib/active_model/validations/presence.rb, line 34
def validates_presence_of(*attr_names)
  validates_with PresenceValidator, _merge_attributes(attr_names)
end
validates_size_of(*attr_names)
Псевдоним для: validates_length_of

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

Spec-Zone.ru

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