代码之家  ›  专栏  ›  技术社区  ›  Yohan

尝试使用rubyonrails显示错误时出错

  •  0
  • Yohan  · 技术社区  · 6 年前

    我看到错误:

    “nil的未定义方法”“errors”“:nilclass”

    试图在使用窗体创建新用户时显示错误。我是RoR的初学者,所以我不知道错误可能来自哪里。这是我的代码:

    用户控制器.rb

    class UsersController < ApplicationController
      before_action :set_current_user
    
      def create
        @user = User.create firstName: params[:firstName], lastName: params[:lastName], email: params[:email], password: params[:password]
        if @user
          @current_user = User.where(email: params[:email], password: params[:password]).first
          session[:user_id] = @current_user.id
          flash[:info] = "Vous etes maintenant connecte"
          redirect_to "/users/home"
        else
          render 'signup'
        end
      end
    
      private
    
      def set_current_user
        if session[:user_id]
          @current_user = User.find(session[:user_id])
        end
      end
    end
    

    用户地址

    class User < ApplicationRecord
    
      validates :firstName, presence: {
        message: "Vous avez oublie quelque chose."
      }
    
      validates :lastName, presence: {
        message: "Vous avez oublie quelque chose."
      }
    
      validates :email, presence: {
        message: "Vous avez oublie quelque chose."
      }
    
      validates :password, presence: {
        message: "Vous avez oublie quelque chose."
      }
    
      validates :email, uniqueness: {
        message: "Cet adresse email est deja prise."
      }
    end
    

    惯例

    Rails.application.routes.draw do
      get 'users/home' => 'users#home'
      get 'users/login' => 'users#login'
      get 'users/signup'
      post 'users/login' => 'users#check'
      post 'users/signup' => 'users#create'
      delete 'users/login' => 'users#logout'
    end
    

    Erb

    <%= form_tag "/users/signup", method: "post" do %>
      <input type="text" name="firstName" placeholder="First Name" />
      <p><%= @user.errors[:firstName].first %></p>
      <!-- More fields here -->
      <input type="submit" value="Confirmer" />
    <% end %>
    

    我以前在stackoverflow上看到过这个错误,但没有一个答案适用于我的问题:/感谢您提前阅读并花时间帮助我!

    2 回复  |  直到 5 年前
        1
  •  4
  •   Mark Merritt    5 年前

    误差 undefined method errors for nil:NilClass 意思是你想打电话 errors 关于零的东西。在这种情况下,它是 @user 那是零。你需要做 @用户 在视图中可用…

    在您的路由中,添加一个控制器操作以获得注册(如果控制器/操作具有相同的名称,这不是真正必要的,但是对于其他读取此名称的人来说,它可能很有用…

    get 'users/signup', to: 'users#signup'
    

    在控制器中添加一个实例化用户的新方法

    def signup
      @user = User.new
    end
    

    这应该可以消除您收到的错误……但是您的实现还有其他问题(即,您还应该遵循vol7ron的建议并使用强参数)

        2
  •  0
  •   vol7ron    6 年前

    我不确定这是确切的原因,但您可能需要白名单您的参数:

    ## Inside your controller
    ## this may not be necessary, but demonstrates how to call a function before action
    # before_action :user_params
    
    ## controller actions here
    # ...
    
    def create
      @user = User.create(user_params)
      # ...
    end   
    
    private
    
    def user_params
      params.require(:user).permit(:firstName, :lastName, :email, :password)
    end