大家好,我正在开发一个带有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
查找username
、password
。。。在CCD_ 7内。所以user_params
正在寻找这样的输入:
{
"user" => {
"username" => "ray",
"password" => "1234",
"password_confirmation" => "1234"
}
}
因此,要么修复前端以发送如上所述与"user"
正确嵌套的数据,要么修复user_params
以在顶级查找所有内容:
params.permit(:username, :password, :password_confirmation)