2016-02-28 96 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的原因安全

使用強參數時,禁用活動控制器參數,直到它們已被列入白名單爲止。這意味着你必須有意識地決定哪些屬性允許批量更新。這是一種更好的安全措施,可幫助防止用戶意外更新敏感模型屬性。

將上面的強參數代碼添加到您的控制器,它應該可以解決您的問題。

相關問題