2012-05-15 50 views
1

我在本書的第14章「登錄」中學習示例。 我有我在「127.0.0.1:3000/login」視圖運作良好,但如果我插入我的用戶名和密碼就返回此錯誤:使用Rails進行敏捷Web開發第14章

NoMethodError在SessionsController#創建

未定義的方法'身份驗證」的#<用戶:0x9f75978>

如何解決?

創建方法sessions_controller.rb是:

def create 
    user = User.find_by_name(params[:name]) 
    if user and user.authenticate(params[:password]) 
     session[:user_id] = user.id 
     redirect_to admin_url 
    else 
     redirect_to login_url, alert: "Invalid user/password combination" 
    end 
    end 
+1

你可以張貼在'應用程序/控制器/ sessions_controller.rb'了'create'方法的代碼? –

+0

好吧我添加了代碼 – user1312490

+1

@ user1312490,仔細檢查您的'用戶'模型是否具有'authenticate'方法 – gmile

回答

4

它試圖呼籲用戶authenticate,這意味着你可能不會對用戶的身份驗證方法。如果你這樣做,確保它不是私人的。

+0

@ user1312490,並確保它不是類方法。只是「確認身份」 – caulfield

2

您提供的代碼嘗試調用用戶對象的實例上的authenticate方法。

根據你的評論回覆:User.authenticate(name, password)你只有在用戶驗證方法 - 它需要名稱和密碼作爲參數。

要撥打的用戶類的方法,你會改用以下內容:

user = User.find_by_name(params[:name]) 
if user && User.authenticate(params[:name], params[:password]) 

另外,查找名爲authenticate實例級方法,(如上所述@caulfield)看起來是這樣的:

def authenticate(password) 
    # does stuff 
end 

代替User.authenticate(name,password)

相關問題