Я получаю сообщение об ошибке «пароль не может быть пустым» при создании нового пользователя в Rails - PullRequest
0 голосов
/ 23 февраля 2019

Я создаю то, что я думал, было простой аутентификацией пользователя в Rails API.Я искал каждый ответ, который я могу найти здесь, и я просто не могу понять, что я делаю неправильно.Независимо от того, что, когда я пытаюсь создать нового пользователя, я получаю ошибку «пароль не может быть пустым».

Вот код моего контроллера:

class UsersController < ApplicationController

  def create
    user = User.new(user_params)
    if user.save
      render json: {user: user}, status: 201
    else
      render json: {errors: user.errors.full_messages}
    end
  end

  private 
  def user_params
    params.require(:user).permit(:name, :email, :password, :password_confirmation)
  end
end

Моя модель,с проверками:

class User < ApplicationRecord
  validates :name, presence: true, length: {maximum: 50}
  validates :email, presence: true, length: {maximum: 255}, uniqueness: true

  has_secure_password
  validates :password, presence: {on: :create}, confirmation: {case_sensitive: true}, length: {minimum: 8}
  validates :password_confirmation, presence: true
end

Тестовый объект JSON, который продолжает отклоняться:

{
    "name": "Jim Nobody",
    "email": "jim@anywhere.com",
    "password": "abc12345",
    "password_confirmation": "abc12345"
}

Ошибка, которую я продолжаю получать:

{
    "errors": [
        "Password can't be blank",
        "Password can't be blank",
        "Password is too short (minimum is 8 characters)",
        "Password confirmation can't be blank"
    ]
}

Я знаю, что есть другиеответы на этот вопрос, но я прочесал их построчно, и я не вижу, что я делаю неправильно.Насколько я вижу, все поля разрешены и написаны правильно.

Буду очень признателен за любую помощь.Спасибо!

Ответы [ 3 ]

0 голосов
/ 23 февраля 2019

Привет, проверьте ваши параметры в контроллере.В настоящее время вы передаете только параметры.Параметры будут пользователями.Просто попробуйте использовать параметры пользователя.

{"users": {"name": "test"}}

0 голосов
/ 23 февраля 2019

Спасибо Раджкумару за ответ.Первоначально мой интерфейс отправлял объект JSON, который выглядел следующим образом:

{
  "name": "Someone",
  "password": "a_password",
  ...
}

Но Rails ожидал объект, который был обернут в хэш user, например:

{
  "user": {
    "name": "Somebody",
    "password": "a_password",
    ...
  }
}

Спасибо всем за помощь!

0 голосов
/ 23 февраля 2019

Я знаю, что это вряд ли является прямым ответом на ваш вопрос, но, на мой взгляд, это поможет.Используйте этот драгоценный камень под названием byebug .В основном, установите его, затем поместите byebug перед сохранением пользователя в контроллере.Когда он выполнит код, сервер будет зависать до тех пор, пока вы не наберете «продолжить» на вкладке «Сервер».Пока вы не наберете продолжить, вы можете использовать вкладку сервера, как консоль rails, и отлаживать текущее состояние параметров и многое другое.Надеюсь, это поможет вам отладить вашу проблему.

...