За Разработка собственной документации для модуля Validatable ...
Validatable создает все необходимые проверки для электронной почты пользователя и пароля. Это необязательно, если вы, возможно, захотите сами создать проверки. Автоматическая проверка, если электронное письмо присутствует, уникально и его формат действителен. Также проверяет наличие пароля, подтверждения и длины.
Смелость моя.
Вы должны отключить модуль Validatable
и проверить свои собственные проверки.
devise :database_authenticatable, :registerable, :rememberable,
:trackable, :timeoutable, :confirmable, :recoverable, :lockable
# :validatable <-- this one needs to go
Просмотрите содержимое lib/devise/models/validatable.rb
и перетащите соответствующие разделы в свой собственный класс пользователя. Для текущей версии 3.2.x
она должна выглядеть примерно так ...
class User < ActiveRecord::Base
# From Devise module Validatable
validates_presence_of :email, if: :email_required?
validates_uniqueness_of :email, allow_blank: true, if: :email_changed?
validates_format_of :email, with: email_regexp, allow_blank: true, if: :email_changed?
validates_presence_of :password, if: :password_required?
validates_confirmation_of :password, if: :password_required?
validates_length_of :password, within: password_length, allow_blank: true
# [ ... ] The rest of your model stuff
protected
# From Devise module Validatable
def password_required?
!persisted? || !password.nil? || !password_confirmation.nil?
end
# From Devise module Validatable
def email_required?
true
end
end
Затем внесите необходимые изменения.
Реальный сценарий: я использую Paranoia gem в ряде проектов, которые не будут работать с этим модулем. Поэтому я удаляю его и настраиваю проверку уникальности электронной почты следующим образом: *
validates_uniqueness_of :email, scope: :deleted_at