2016-11-26 1 views
0

나는 Michael Hartl의 railstutorial을 따라 가고있다. 원하는 경우 충고 한대로 장을 건너 뛰었습니다. 사용자 모델에 rails testAccountsActivationsControllerPasswordResetsController에 대한 동일한 오류가 발생했습니다. 잘못된 인수 수 (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 
    . 
    . 

사용자 모델

class User 
    . 
    . 
    . 

    def authenticated?(activation_token) 
     return false if activation_digest.nil? 
     BCrypt::Password.new(activation_digest).is_password?(activation_token) 
    end 
    . 
    . 
+0

분명히 하나의 매개 변수를 사용하는 경우 왜 두 개의 매개 변수를 전달합니까? 거기에 코드가 있어도 * activate_token은 유효한 인수입니다. – tadman

+0

잘 모르겠습니다. 튜토리얼에서 말한 내용입니다. 거기에 무엇을 가져야합니까? –

+0

토큰 만 전달해야합니다. 그렇다면'params [: id]'라면 그렇게하십시오. 자습서가 깨졌습니다. – tadman

답변

0

그것은 단지 하나의 허용 반면에 당신은, User#authenticated? 방법으로 두 개의 인수를 전달하고 있습니다.

또한 테스트와는 관계가 없습니다. 구문 오류가있는 것 같습니다.

+0

구문 오류가 아니며 ArgumentError 오류입니다. –

+0

이 맞습니다. –

+0

나쁘다! 구문 오류가 아닙니다. – 31piy

0

params[:id]을 전달하지 말고 :reset을 전달하면됩니다. 제 생각에는 그것이 잘 돌아갈 것 같습니다.

관련 문제