NoMethodError (неопределенный метод `errors 'для nil: NilClass): - PullRequest
0 голосов
/ 24 сентября 2018

Мы получаем вышеупомянутую ошибку, не совсем понятно, почему.Мы создаем API для веб-сайта викторины, и это наш logins_controller:

 class Api::LoginsController < ApplicationController

    skip_before_action :verify_authentication

    def create
        user = User.find_by_username(params[:username])
        if  user && user.authenticate(params[:password])
            render json: { name: user.name, token: user.token }
        else
            render json: user.errors
        end
    end
 end

Наша схема:

create_table "users", force: :cascade do |t|
    t.string "name"
    t.string "username"
    t.string "password_digest"
    t.string "token"
    t.boolean "admin"
    t.datetime "created_at", null: false
    t.datetime "updated_at", null: false
    t.index ["token"], name: "index_users_on_token", unique: true
  end

Сообщение об ошибке в терминале:

Started POST "/api/logins" for 127.0.0.1 at 2018-09-23 18:30:48 -0400
Processing by Api::LoginsController#create as */*
  Parameters: {"login"=>{}}
  User Load (4.2ms)  SELECT  "users".* FROM "users" WHERE "users"."username" IS NULL LIMIT $1  [["LIMIT", 1]]
  ↳ app/controllers/api/logins_controller.rb:6
Completed 500 Internal Server Error in 8ms (ActiveRecord: 4.2ms)



NoMethodError (undefined method `errors' for nil:NilClass):

app/controllers/api/logins_controller.rb:10:in `create'

Это работало просто отлично, а потом вдруг говорит, что пользователь ноль?Разве мы не определили это при создании.

Ответы [ 4 ]

0 голосов
/ 27 сентября 2018

Просматривал некоторые коды, ничего не менял, но просто менял пользователя на @user везде, чтобы это работало!

0 голосов
/ 24 сентября 2018

Вы не отправили никаких параметров в контроллер

В вашем терминале: Parameters: {"login"=>{}}

user = User.find_by_username(params[:username]) 

, поэтому переменная user будет иметь значение nil

0 голосов
/ 26 сентября 2018

Если пользователь с именем пользователя не существует в вашей базе данных, следующий код вернет nil

user = User.find_by_username(params[:username])

В результате вы получите undefined method errors при вызове user.errors

0 голосов
/ 24 сентября 2018

Когда параметр :username не соответствует ни одному пользователю, переменная user будет nil.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...