Rails 未传递参数来创建用户

Rails parameters not being passed to create a user

大家好,我正在开发一个带有 javascript/html/css 前端和 rails 后端的登录页面。因此,当我在前端单击注册按钮时,我向 rails 中的创建操作发出了 POST 请求,并传递了用户名、密码和密码确认。我在创建操作中放了一个 byebug 来查看参数,它看起来像这样

#<ActionController::Parameters {"username"=>"ray",
 "password"=>"1234",
 "password_confirmation"=>"1234",
 "controller"=>"users",
 "action"=>"create",
 "user"=>#<ActionController::Parameters {"username"=>"ray"} permitted: false>} permitted: false>

我尝试保存用户,但由于某些原因我无法保存用户,因为我的 user_params 方法没有返回密码和 password_confirmation。这就是我的 UsersController 的样子。

class UsersController < ApplicationController
  def create
    user = User.new(user_params)
    if user.save
      session[:user_id] = user.id
      render json: {
        status: 200,
        user: user
      }
    else
      render json: {
        status: 401,
        message: "Failure!"
      }
    end
  end

  private
    def user_params
      byebug
      params.require(:user).permit(:username, :password, :password_confirmation)      
    end
end

我想我不明白的是为什么只插入了用户名。

你的传入参数是这样的:

{
  "username" => "ray",
  "password" => "1234",
  "password_confirmation" => "1234",
  "user" => { "username" => "ray" }
}

但是你的 user_params 中的 require:

params.require(:user).permit(:username, :password, :password_confirmation)

正在查看这些参数中的 user,然后 permituser 中查找 usernamepassword、...。所以 user_params 正在寻找这样的输入:

{
  "user" => {
    "username" => "ray",
    "password" => "1234",
    "password_confirmation" => "1234"
  }
}

因此,要么修复您的前端以发送与上述 "user" 正确嵌套的数据,要么修复 user_params 以在顶层查找所有内容:

params.permit(:username, :password, :password_confirmation)