私はMichael Hartlによるレールチュートリアルを続けています。必要に応じてアドバイスされた通りに章を飛び越しましたが、私はユーザモデルrails test
の同じエラーをAccountsActivationsController
とPasswordResetsController
、間違った数の引数(2に対して1)の両方で取得しています。レールエラー、1の間に引数2が間違っていますか?
Iveはこれについて少し時間を費やして、どこが間違っていたのか見てみましたが、私は外部者の視点を求めると思っていました。ユーザーモデル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
.
.
Userモデル
class User
.
.
.
def authenticated?(activation_token)
return false if activation_digest.nil?
BCrypt::Password.new(activation_digest).is_password?(activation_token)
end
.
.
なぜ明らかに2つのパラメータを受け取りましたか? * activation_token *は有効な引数です。 – tadman
わかりません。チュートリアルで言いました。何を持っていなければならないのですか? –
あなたはトークンだけを渡すべきです。もしそれが 'params [:id]'ならばそうです。チュートリアルは壊れています。 – tadman