在Rails中创建新用户时,我不断收到“密码不能为空”错误

时间:2019-02-23 05:48:12

标签: 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}, 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 :(得分:2)

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

  

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

答案 1 :(得分:0)

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

答案 2 :(得分:0)

感谢Rajkumar的回答。最初,我的前端发送的是这样的JSON对象:

SystemChrome.setSystemUIOverlayStyle(SystemUiOverlayStyle(
  statusBarColor: Colors.transparent,
));

但是Rails期望这样一个包裹在{ "name": "Someone", "password": "a_password", ... } 哈希中的代码:

user

谢谢大家的帮助!