2012-01-17 5 views
0

У меня есть модель пользователя следующим образом:Отключения валидации при переустановке паролей в DEViSE/Warden

class User < ActiveRecord::Base 
    devise :database_authenticatable, :registerable, :invitable, 
    :recoverable, :rememberable, :trackable, :validatable, 
    :token_authenticatable, :omniauthable 

    validates_presence_of :nickname, :unless => :skip_nickname_requirement 
end 

У меня есть несколько записей пользователей в базе данных с нулевым прозвищем - эти люди были импортированы из другой системы и На самом деле у меня нет прозвища. Этим пользователям предлагается установить свои пароли по ссылке потерянных паролей, например http://example.com/users/password/edit?reset_password_token=iAYeQRwWrt8geC8eEXR4, а затем, когда они войдут в систему, добавьте их личные данные, такие как ник и т. Д.

Проблема в том, что когда вы переходите к этому паролю сброса, re, чтобы ввести ваш пароль (и снова для подтверждения). Когда вы отправляете, проверка не выполняется, потому что псевдоним равен нулю.

Как отключить проверку псевдонима при перепродаже вашего пароля? Я не хочу добавлять текстовое поле псевдонима в форму сброса пароля.

Заранее благодарим за мысли!

ответ

0

Я не знаю, будет ли простой validates_presence_of :nickname, allow_blank: true решить вашу проблему, потому что вы можете захотеть, чтобы он был пустым только для импортированных пользователей. Поэтому другим способом было бы использование пользовательских валидаций.

# app/models/user.rb 

class NicknameValidator < ActiveModel::EachValidator 
    def validate_each(record, attribute, value) 
    record.errors[attribute] << "validation failed" unless :skip_nickname_requirement?(value) 
    end 

    private 

    def skip_nickname_requirement?(values) 
    # imported_from_legacy_system? would need to be implemented 
    value.present? || self.imported_from_legacy_system? 
    end 
end 

class User < ActiveRecord::Base 
    devise :database_authenticatable, :registerable, :invitable, 
    :recoverable, :rememberable, :trackable, :validatable, 
    :token_authenticatable, :omniauthable 

    validates :nickname, :nickname => true 
end 
Смежные вопросы