2016-02-26 3 views
0

Я использую рельсы 4. Затем моя модель выглядит следующим образомКак запустить «has_secure_password» в состоянии?

class User < ActiveRecord::Base 

    has_secure_password 

    def checkup? 
    #Some Condition which returns true or false 
    self.attr == "apple" 
    end 
end 

В этом я хочу has_secure_password бег с условием checkup?. Я попробовал все возможные способы.

Попробуйте 1

has_secure_password :if => checkup? 

Попробуйте 2

def checkup? 
    if condition_fails? 
     has_secure_password 
    end 
    end 

помощь?

+0

, что это ваша проверка? –

+0

Предположим, что это 'self.attr ==" apple "' – Vicky

+0

Вы хотите, чтобы файл дайджеста был создан, если проверка верна? Или вы хотите, чтобы проверки выполнялись, если проверка верна? –

ответ

-1

Итак, если вы посмотрите на исходный код через документы. Вы можете пройти проверку: false имеет защищенный пароль. Затем вам просто нужно переопределить их.

Они

validate do |record| 
    record.errors.add(:password, :blank) unless record.password_digest.present? 
end 

validates_length_of :password, maximum: ActiveModel::SecurePassword::MAX_PASSWORD_LENGTH_ALLOWED 
validates_confirmation_of :password, allow_blank: true 

Таким образом, вы в конечном итоге с

class User 
    has_secure_password(validations: false) 
    validate do |record| 
    record.errors.add(:password, :blank) if record.password_digest.blank? && checkup? 
    end 

    validates_length_of :password, maximum: ActiveModel::SecurePassword::MAX_PASSWORD_LENGTH_ALLOWED, if: :checkup? 
    validates_confirmation_of :password, allow_blank: true, if: :checkup? 
end 
+0

Почему downvote? и если да, то какой способ лучше это сделать? –

Смежные вопросы