2016-11-26 11 views
0

私はMichael Hartlによるレールチュートリアルを続けています。必要に応じてアドバイスされた通りに章を飛び越しましたが、私はユーザモデルrails testの同じエラーをAccountsActivationsControllerPasswordResetsController、間違った数の引数(2に対して1)の両方で取得しています。レールエラー、1の間に引数2が間違っていますか?

Iveはこれについて少し時間を費やして、どこが間違っていたのか見てみましたが、私は外部者の視点を求めると思っていました。ユーザーモデルdef authenticated?と同じアクションで、それぞれのコントローラーでvalid_usereditアクションのエラーが表示されます。

何か問題がありますか?

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 
    . 
    . 
+0

なぜ明らかに2つのパラメータを受け取りましたか? * activation_token *は有効な引数です。 – tadman

+0

わかりません。チュートリアルで言いました。何を持っていなければならないのですか? –

+0

あなたはトークンだけを渡すべきです。もしそれが 'params [:id]'ならばそうです。チュートリアルは壊れています。 – tadman

答えて

0

それは一つだけを受け入れるのに対し、あなたは、User#authenticated?メソッドに二つの引数を渡しています。

また、テストとは関係ありません。それは構文エラーのようです。

+0

これは構文エラーではなく、 'ArgumentError'エラーです。 –

+0

が正しいです。 –

+0

私の悪い!構文エラーではありません。 – 31piy

0

params[:id]を渡す必要はありません。:resetを渡すだけです。それはあなたのために働くと思います。

関連する問題