2016-02-28 139 views
0
class SessionsController < ApplicationController 

    def new 

    end 

    def create 
     user = User.find_by(email: params[:session][:email].downcase) 
     if user && user.authenticate(params[:session][:password]) 
      session[:user_id] = user.id 
      flash[:success] ="You have successfully logged in" 
      redirect_to users_path(user) 

     else 
      flash.now[:danger] = "Invalid email or password" 
      render 'new' 

     end 

    end 

    def destroy 
     session[:user_id] = nil 
     flash[:success] = "Successfully logged out" 
     redirect_to root_path 

    end 
end 

This is my error This is my error未定义的方法`downcase”的零:NilClass Ruby on Rails的

这里是routes.rb中

get 'login', to: 'sessions#new' 

post 'login', to: 'sessions#create' 

delete 'logout', to: 'sessions#destroy' 
+0

你可以尝试改变':session'到:sessions'并让我知道它是否工作? –

+0

感谢您的答复..但它说:“未定义的方法'[]为零:NilClass” –

回答

0

看看你的错误消息:params [:session] [:email] .downcase是零。根据你的参数,它应该是:

def create 
    user = User.find_by(email: params[:session][:username].downcase) 
+0

谢谢你的工作,你救了我的一天:) –

0

这里有两种可能性。

一个是:session应该转换为:sessions

如果这样不能解决问题,请尝试执行强参数。

基本上,User.find_by(email: params[:session][:email]返回nil,因为它找不到具有这些属性的用户。

的解决方案是使用strong parameters,所以活动记录发现他们

http://edgeguides.rubyonrails.org/action_controller_overview.html#strong-parameters

根据您的private部分,您可以定义参数

private 

    def person_params 
    params.require(:user).permit(:email, :password) 
    end 

你需要,这是由于Rails的原因安全

使用强参数时,禁用活动控制器参数,直到它们已被列入白名单为止。这意味着你必须有意识地决定哪些属性允许批量更新。这是一种更好的安全措施,可帮助防止用户意外更新敏感模型属性。

将上面的强参数代码添加到您的控制器,它应该可以解决您的问题。

相关问题