2016-11-26 97 views
0

我正沿着Michael Hartl的railstutorial。我根據建議跳過一章,如果需要的話,我在rails test的用戶模型中得到了AccountsActivationsControllerPasswordResetsController錯誤的相同錯誤,錯誤的論證數量(2代表1)。導軌錯誤,錯誤的參數數目2 for 1?

我花了一點時間在這個試圖看看我錯了什麼地方,但認爲我會問一個局外人的觀點。我收到錯誤,在用戶模型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

爲什麼在明確需要時傳遞兩個參數?你甚至可以在那裏只有*''activation_token'是一個有效的參數。 – tadman

+0

不確定,那就是它在教程中所說的。那裏應該有什麼,你會重拾? –

+0

你應該只傳遞令牌,所以如果是'params [:id]'那麼就這樣吧。該教程已破解。 – tadman

回答

0

你傳入兩個參數User#authenticated?方法,而只接受一個。

此外,它與您的測試無關。這似乎是一個語法錯誤。

+0

它不是語法錯誤,是'ArgumentError'錯誤。 –

+0

這是正確的。 –

+0

我的不好!這不是一個語法錯誤。 – 31piy

0

您無需通過params[:id]只需通過:reset。我認爲它會爲您工作。

相關問題