2016-02-26 56 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?如果是这样,那么完成它的更好方法是什么? –