2016-02-26 23 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?如果是這樣,那麼完成它的更好方法是什麼? –