没有传递Rails参数来创建用户



大家好,我正在开发一个带有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>

我试图保存用户,但由于某些原因,我无法保存用户,因为密码和password_confirmation没有从我的user_params方法返回。这就是我的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,然后permit查找usernamepassword。。。在CCD_ 7内。所以user_params正在寻找这样的输入:

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

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

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

最新更新