Ruby on rails 我不断地得到;密码可以';“不要空白”;在Rails中创建新用户时出错

Ruby on rails 我不断地得到;密码可以';“不要空白”;在Rails中创建新用户时出错,ruby-on-rails,validation,authentication,activerecord,bcrypt,Ruby On Rails,Validation,Authentication,Activerecord,Bcrypt,我在Rails API中创建了一个简单的用户身份验证。我已经搜索了这里能找到的每一个答案,我根本不知道我做错了什么。不管怎样,当我尝试创建一个新用户时,我会得到一个错误“密码不能为空” 这是我的控制器代码: class UsersController < ApplicationController def create user = User.new(user_params) if user.save render json: {user: user},

我在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
我一直得到的错误是:

{
    "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"
    ]
}
我知道这个问题还有其他答案,但我已经把它们一行一行地梳理了一遍,我看不出我做错了什么。据我所知,所有字段都是允许的,并且拼写正确


我非常感谢任何帮助。谢谢大家!

我知道这很难直接回答你的问题,但在我看来,这会有所帮助。使用这个名为。基本上,安装它,然后将
byebug
放在用户保存到控制器之前。当它执行代码时,它将挂起服务器,直到您在“服务器”选项卡中键入“继续”。在键入continue之前,您可以像rails控制台一样使用服务器选项卡,调试参数的当前状态等等。希望这能帮助您调试您的问题。

我知道这很难直接回答您的问题,但在我看来,这会有所帮助。使用这个名为。基本上,安装它,然后将
byebug
放在用户保存到控制器之前。当它执行代码时,它将挂起服务器,直到您在“服务器”选项卡中键入“继续”。在键入continue之前,您可以像rails控制台一样使用服务器选项卡,调试参数的当前状态等等。希望这能帮助您调试问题。

您好,请检查控制器中的参数。当前您只传递参数。参数将是用户。只需尝试使用用户参数

{“用户”:{“名称”:“测试”}


嗨,检查控制器中的参数。当前您只传递参数。参数将是用户。只需尝试使用用户参数

{“用户”:{“名称”:“测试”}


感谢Rajkumar的回答。最初,我的前端发送一个JSON对象,如下所示:

{
  "name": "Someone",
  "password": "a_password",
  ...
}
但是Rails期望一个被包装在
用户
散列中,如下所示:

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

谢谢大家的帮助

感谢拉吉库马尔的回答。最初,我的前端发送一个JSON对象,如下所示:

{
  "name": "Someone",
  "password": "a_password",
  ...
}
但是Rails期望一个被包装在
用户
散列中,如下所示:

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

谢谢大家的帮助

如果手动测试,您是否可以发布正在发送的
params
,如果正确测试,是否可以发布测试代码本身?当我在rails控制台中测试时,我能够通过验证,但当我在Postman中输入此json对象时,我会收到错误。这让我觉得我的问题一定在控制器文件中,而不是模型文件中。Json参数:
{“name”:“Jim Nobody”,“email”:jim@nowhere.com“,“password”:“12345678”,“password_confirmation”:“12345678”}
您可以查看rails服务器日志并发布一个示例请求吗?这通常包括发送到服务器的参数。您是否有
密码\u摘要
属性?可能在以下位置失败:
record.errors.add(:password,:blank),除非record.password\u digest.present?
如果手动测试,是否可以发布发送的
params
,如果测试正确,是否可以发布测试代码本身?当我在rails控制台中测试时,我能够通过验证,但是当我在Postman中输入这个json对象时,我得到了错误。这让我觉得我的问题一定在控制器文件中,而不是模型文件中。Json参数:
{“name”:“Jim Nobody”,“email”:jim@nowhere.com“,“password”:“12345678”,“password_confirmation”:“12345678”}
您可以查看rails服务器日志并发布一个示例请求吗?这通常包括发送到服务器的参数。您是否有
密码\u摘要
属性?可能在以下位置失败:
record.errors.add(:password,:blank),除非record.password\u digest.present?
谢谢!我发现,当我检查user.password时,它是空的,即使我正在传递它。实际上,我需要将所有json参数封装在一个更大的“user”参数中,以便Rails端能够识别它们。谢谢!我发现,当我检查user.password时,它是空的,即使我正在传递它。实际上,我需要将所有json参数封装在一个更大的“user”参数中,以便Rails端能够识别它们!前端的JSON对象需要用
user
散列进行包装。
{“user”:{“name”:“someone”,“email”:.“…}}}
就是这样!前端的我的JSON对象需要包装在一个
user
散列中。
{“user”:{“name”:“someone”,“email”:.“..}}