rails中的强参数,数组作为根对象

时间:2018-03-09 10:57:39

标签: ruby-on-rails ruby-on-rails-4

我有一个对象数组传递给我的控制器,具有以下结构:

[
    {
        "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"=>"..."
}

2 个答案:

答案 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) }