Rails未定义的nil方法:NilClass



我得到这个错误,而点击在表单登录按钮:

undefined method `[]' for nil:NilClass

带注册表单的视图如下:

  <%= 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

用户控制器:

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

路线:

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

另外,我不想创建'注册'视图-应该没有可能通过网站创建用户

看你的表格,我认为你没有params[:login]。所以它是零params[:login][:password]等于nil[:password]。这就是为什么会出现错误。

根据表格,你得到的应该是params[:session][:login]params[:session][:password]。所以剩下的唯一问题就是如何实现你的User。find_by_login方法。

相关内容

最新更新