Rails 中以数组为根对象的强参数

mah*_*ar4 5 ruby-on-rails ruby-on-rails-4

我有一个对象数组通过以下结构传递到我的控制器:

[
    {
        "id": 1,
        "fruit_ids": [1, 2, 3]
    },
    {
        "id": 2,
        "fruit_ids": [4, 5, 6]
    },
]
Run Code Online (Sandbox Code Playgroud)

根对象不是{},而是一个数组。我不确定如何为这种情况编写强参数状态。我努力了

params.permit [:id, fruit_ids: []]
Run Code Online (Sandbox Code Playgroud)

和其他类似的选项,但它不允许这样做。

编辑:

我没有在请求正文中发送 JSON 对象。我正在发送一个 JSON 数组。当我检查控制器中的值时params,结果如下:

{
    "_json" => [
        {"id"=>1, "fruit_ids"=>[1, 2, 3]},
        {"id"=>2, "fruit_ids"=>[4, 5, 6]}
    ],
    "format"=>"json",
    "controller"=>"...",
    "action"=>"..."
}
Run Code Online (Sandbox Code Playgroud)

Anu*_*yan 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]}]}
Run Code Online (Sandbox Code Playgroud)