我正在使用rails 4.然后我的模型看起来像这样
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 :(得分:-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