2014-10-27 116 views
-1

我正在寫登錄/註銷一個簡單的應用程序,我有一個錯誤:NoMethodError,未定義的方法登錄

NoMethodError in WelcomeController#create 
undefined method `login' for #<User:0x3dc02c0> 

這是我的usermodel

def self.authenticate(pass) 
    user = find_by_pass(pass) 
    if user.nil? 
     return nil 
    else 
     return user 
    end 
    end 

這是我的控制器

def create 
    user = User.find_by_username(params[:session][:username]) 
     if user && user.authenticate(params[:session][:pass]) 
     login user 
     redirect_to root_url              
    else 
    render 'index' 
    end 
    end 

這是我的好幫手

def login(user) 
    session[:user_id] = user.id 
    end 

這是我的應用程序控制器

protect_from_forgery with: :exception 
include WelcomeHelper 

請幫我解決這個問題:)

+1

它似乎真的搞砸了。它不直接工作,因爲'login'被定義爲'User'類方法,並且您嘗試將它用作實例方法。但是這段代碼有其他嚴重的問題。首先,你似乎不以任何方式加密密碼,這是安全問題。 – 2014-10-27 08:50:39

+0

問題是登錄是輔助方法。 Helper方法在控制器中不可用。儘管代碼存在其他問題,但將登錄方法移至application_controller將解決此特定問題。 – jvnill 2014-10-27 09:01:25

回答

0

嘗試這樣的:

application_controller:

protect_from_forgery with: :exception 
def login(user) 
    session[:user_id] = user.id 
end 

,並使用所有您定義的其餘方法爲

+0

這是行不通的,但我嘗試不同的方式。無論如何謝謝你的幫助! – mayoneQD 2014-10-27 09:43:11

相關問題