2014-10-27 111 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

相关问题