【发布时间】:2018-03-27 10:11:20
【问题描述】:
使用 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
如您所料,将接受后者(没有嵌套)。根据the rails API doc 上的描述,如果缺少operator 键,包括第二个参数(即params)将使用该值,因此它应该工作。
【问题讨论】:
标签: ruby-on-rails strong-parameters