我正在使用设计宝石(身份验证)。我正在为重置密码实现自定义验证。用户无法使用现有密码重置新密码。 在用户模型代码中:
class User < ActiveRecord::Base
include ActiveModel::ForbiddenAttributesProtection
validate :check_existed_password
def check_existed_password
if User.find_by_email(self.email).valid_password?(password)
errors.add(:password, "password already existed, try other")
end
end
end
运行rspec后,我收到错误:失败/错误:no_email_user.should_not be_valid NoMethodError: 未定义的方法`valid_password?'为零:NilClass。 user_spec.rb文件中的所有预先存在的测试用例都将失败。有什么建议吗?
块引用
答案 0 :(得分:0)
email
不存在或您提供的email
没有任何与之关联的用户。这就是你为错误辩护的原因。在您检查的规范中,no_email_user.should_not be_valid
表示没有电子邮件的用户不应该有效。您添加的check_existed_password
验证只需在update
上运行,而不是在创建时运行。所以把它作为:
validate :check_existed_password, :on => :update
由于用户将在更新操作时重置密码而不在创建时重置密码。 目前它将尝试找到尚未创建的用户并且每次都抛出错误。
希望这有帮助。