2016-09-08 7 views
0

ich diesen Fehler während in Schaltfläche in Form Log klicken:Rails nicht definierte Methode für nil: NilClass

undefined method `[]' for nil:NilClass 

Ansicht mit Anmeldeformular unten:

<%= form_for(:session, url: login_path) do |f| %> 
    <%= f.text_field :login, :placeholder => "login" %> 
    <%= f.password_field :password, :placeholder => "Password" %> 
    <%= f.submit "Log in", class: "btn-submit"%> 
    <% end %> 

SessionsController:

class SessionsController < ApplicationController 

def new 
end 

def create 
    @user = User.find_by_login(params[:login][:password]) ////ERROR LINE 
    if @user && @user.authenticate(params[:session][:password]) 
     session[:user_id] = @user.id 
     redirect_to '/' 
    else 
     flash.now[:danger] = 'err' 
     redirect_to '/login' 
    end 
end 

def destroy 
    session[:user_id] = nil 
    redirect_to '/' 
end 
end 

Benutzercontroller:

class UsersController < ApplicationController 
def new 
    @users = User.new 
end 
def create 
    @user = User.new(user_params) 
    if @user.save 
     session[:user_id] = @user.id 
     current_user = @user.id 

     redirect_to @user 
    else 
     redirect_to '/login' 
    end 
end 
private 
def user_params 
    params.require(:user).permit(:first_name, :last_name, :email, :login) 
end 
end 

Routen:

get 'logout' => 'sessions#destroy' 
    post 'logout' => 'sessions#destroy' 
    delete 'logout' => 'sessions#destroy' 
    get 'login' => 'sessions#new' 
    post 'login' => 'sessions#create' 
    resources :users, :user_types 

Auch ich will nicht ‚Anmeldungen‘ Ansicht erstellen - es sollte keine Möglichkeit, Benutzer über die Website an Ihrer Form

+0

Probieren Sie 'form_for (: Sitzung, URL: login_path,: method =>" post ") do | f |'. Können Sie die vollständige Fehlermeldung einschließlich der Zeilennummer und der Zeile, in der der Fehler auftritt, posten? – Kumar

Antwort

0

der Suche zu erstellen, glaube ich nicht, Sie haben params[:login]. So wird es Null sein und params[:login][:password] wird zu nil[:password] ausgewertet. Deshalb haben Sie den Fehler.

Was Sie haben, sollte nach dem Formular params[:session][:login] und params[:session][:password] sein. Die einzige verbleibende Frage ist, wie Sie Ihre User.find_by_login-Methode implementiert haben.

+0

ok ich habe jetzt den fehler – andrey

Verwandte Themen