我最近意识到,当我试图在POST请求中创建User类的多个项时,会添加一个参数。
我有一些允许的参数:
def user_params
params.permit(:account_id, users: [:type, :name, :account_id])
end
下面是我在UsersController中的create方法:
def create
if user_params[:users].blank?
render status: :no_content
return
end
begin
_users= User.create!(user_params[:users])
render json: _users, status: :created
rescue ActiveRecord::RecordInvalid
render json: _users.errors, status: :unprocessable_entity
end
end
当我尝试使用Postman测试时,我使用这些参数:
{
"users": [{
"type": "test",
"name": "test",
"account_id": "2DAC41seuRwGIxTn4PQPZc"
}, {
"type": "test2",
"name": "test2",
"account_id": "2DAC41seuRwGIxTn4PQPZc"
}]
}
下面是路由器的conf:
resources :account, except: [:index] do
resources :users, only: [:create, :show, :index]
end
每次我在/accounts/2DAC41seuRwGIxTn4PQPZc/users
上执行POST请求时,都会在rails控制台中看到以下参数:
参数:{“users”=>[{“type”=>“test”,“name”=>“test”,“account_id”=>“2DAC41seuRwGIxTn4PQPZc”},{“type”=>“test2”,“name”=>“test2”,“account_id”=>“2DAC41seuRwGIxTn4PQPZc”,}],“account_id”=>“2DAC41seuRwGIxTn4PQPZc”,“user”=>{}}
不允许的参数::用户。
我不知道这个参数从何而来。有人能给我点启发吗?
请注意,我仍然在学习rails和ruby,也许我错过了一些明显的东西。
1条答案
按热度按时间epggiuax1#
正如@spickerman所提到的,问题是ParamsWrapper期望的是JSON格式,根据doc:
如果您启用ParamsWrapper for:json format,[...],它将被 Package 到一个嵌套的散列中,其中的键名与控制器的名称匹配。
然而,即使控制器是复数,模型名称也必须是单数。
我修复了将
users
列表更改为user
的问题:Copyright © 2018 - 2019 www.cnjs.com. All Rights Reserved.粤ICP备16048888号-1粤公网安备4401050200000018号