我正在跟随Michael Hartl的轨道教程。如果需要,我按照建议跳过了一章,rails test
和AccountsActivationsController
PasswordResetsController
的用户模型出现相同的错误,错误的争论数量(2为1)。
我花了一点时间试图看看我哪里出错了,但我想我会问一个局外人的观点。我在用户模型def authenticated?
中的相同操作中收到错误,来自各自控制器中的valid_user
和edit
操作。
可能是什么问题?
AccountsActivationsController
class AccountsActivationsController
def edit
user = User.find_by(email: params[:email])
if user && !user.activated? && user.authenticated?(:activation, params[:id])
user.activate
user.update_attribute(:activated, true)
user.update_attribute(:activated_at, Time.zone.now)
log_in user
flash[:success] = "Account activated!"
redirect_to user
else
flash[:danger] = "Invalid activation link"
redirect_to root_url
end
end
end
PasswordResetsController
class PasswordResetsConrtoller
.
.
.
def valid_user
unless (@user && @user.activated? &&
@user.authenticated?(:reset, params[:id]))
redirect_to root_url
end
end
.
.
用户模型
class User
.
.
.
def authenticated?(activation_token)
return false if activation_digest.nil?
BCrypt::Password.new(activation_digest).is_password?(activation_token)
end
.
.
答案 0 :(得分:0)
您将两个参数传递给User#authenticated?
方法,而它只接受一个。
此外,它与您的测试无关。这似乎是语法错误。
答案 1 :(得分:0)
您无需通过params[:id]
只需通过:reset
。我认为这对您有用。