如何在条件下运行“has_secure_password”?

时间:2016-02-26 15:48:38

标签: ruby-on-rails ruby

我正在使用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_passwordcheckup?条件运行。我尝试了所有可能的方法。

尝试1

has_secure_password :if => checkup?

尝试2

  def checkup?
    if condition_fails?
      has_secure_password  
    end
  end

任何帮助?

1 个答案:

答案 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