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