我有一个对象数组传递给我的控制器,具有以下结构:
[
{
"id": 1,
"fruit_ids": [1, 2, 3]
},
{
"id": 2,
"fruit_ids": [4, 5, 6]
},
]
根对象不是{}
,而是数组。我不确定如何为这个案例写一个强大的params状态。我试过了
params.permit [:id, fruit_ids: []]
和其他类似的选项,但它不允许它。
编辑:
我没有在请求正文中发送JSON对象。我正在发送一个JSON数组。当我在控制器中检查params
的值时,结果如下:
{
"_json" => [
{"id"=>1, "fruit_ids"=>[1, 2, 3]},
{"id"=>2, "fruit_ids"=>[4, 5, 6]}
],
"format"=>"json",
"controller"=>"...",
"action"=>"..."
}
答案 0 :(得分:1)
理想情况下,您应该始终将JSON对象作为参数发送,如果您没有明确地为对象提供密钥,则需要_json
,就像您的参数一样。
无论如何要在你的情况下写一个强参数,你可以做类似的事情,
params = ActionController::Parameters.new({
"_json" => [
{"id"=>1, "fruit_ids"=>[1, 2, 3]},
{"id"=>2, "fruit_ids"=>[4, 5, 6]}
],
"format"=>"json",
"controller"=>"...",
"action"=>"..."
}
params.permit('_json': [:id, fruit_ids: []]) # You need this line.
# => {"_json"=>[{"id"=>1, "fruit_ids"=>[1, 2, 3]}, {"id"=>2, "fruit_ids"=>[4, 5, 6]}]}
答案 1 :(得分:0)
这是正确的答案:
params.require(:_json).map { |params| params.permit(:id, :fruit_ids) }