使用Ruby on Rails(5.1.4),我试图将一个ID数组传递给控制器,同时可选择将数组嵌套在一个带有控制器名称的哈希中。我的params方法如下:
def operator_params
params.fetch(:operator, {}).permit(ids: [])
end
附加到请求的示例JSON主体可能是(虽然我也尝试将数组放入URL中):
{
"ids": ["asd"]
}
Rails会看到参数Parameters: {"ids"=>["asd"], "id"=>"570158bb-428d-4e55-b55a-a94d1515c24a", "operator"=>{}}
,但仍会过滤掉它们。
ap operator_params
的结果是{}
。
我错过了一些明显的东西吗?
奇怪的是我在我的应用程序的其他地方使用了类似的逻辑:params.fetch(:flight, {}).permit(..., :ids)
,它甚至没有声明通常需要的数组类型,但工作正常。
更新:我对.fetch的理解似乎有些偏差,应该是:
def operator_params
params.fetch(:operator, params).permit(ids: [])
end
哪个 允许您提交{"operator": {"ids": []}}
或{"ids": []}
并接受其中之一。但是,这似乎仍然不适用于阵列。此方法将接受前者(嵌套在operator
下),而:
def operator_params
params.permit(ids: [])
end
正如你所料,会接受后者(没有嵌套)。根据{{3}}上的说明,包含第二个参数(即params
),如果缺少operator
密钥,则会使用该值,因此应工作。
答案 0 :(得分:0)
参数:{" ids" => [" asd"]," id" =>" 570158bb-428d-4e55-b55a -a94d1515c24a"," operator" => {}}
将其更改为
参数:{" ids" => [" asd"," {" id" => " 570158bb-428d-4e55-b55a-a94d1515c24a"}"," {" operator" => {}}"]}
答案 1 :(得分:0)
这是由于你的params包含operator
将params值传递为
{ "operator"=> { "ids"=>["asd"], "id"=>"570158bb-428d-4e55-b55a-a94d1515c24a" } }