这是Rails在查询参数中接受数组的方式:
PUT /resource.json?sport_ids[]=133&sport_ids[]=64&sport_ids[]=71 ...
我试图谷歌这个问题,但没有找到任何明确的文档:
如何告诉Rails我们希望sport_ids变为空(通过查询参数传递空的sport_ids数组)?
答案 0 :(得分:2)
HTTP请求只能包含url本身的变量。这是HTTP的限制功能,而不是Rails。
看一下How Does Rack Parse Query Params? With Parse_nested_query来弄清楚rails如何将变量收集到一个数组中,如果是空数组,它就不会用完。
< / LI>您可以避免发送params["sport_ids"]
并修改控制器:
params["sport_ids"] ||= []
{
"sport_ids": []
}
或者数据为:
//...
{
"sport_ids": [133, 64, 71]
}
//...
有关HTTP请求步骤的详细信息,请查看Running a HTTP request with rails。
答案 1 :(得分:0)
虽然@ mohameddiaa27的答案对于如何通过在请求体中传递这样的数据作为JSON有很好的建议我发现我不能在我的应用程序中依赖它:我发现组合这样的JSON传递并不容易进入多部分表单中的请求正文,我想传递用户记录(其中包含user[sport_ids]
)和用户的头像图像(user[avatar]
)字段。
所以我继续研究如何使用POST / PUT请求的请求体中的默认“查询参数”方法实现这一点,并找到了我无法在服务器端重置sport_ids的原因:这是缺乏的对该特定sport_ids
字段的许可。现在我有以下许可证(伪代码):
current_user.update!(user_params)
where user_params is
user_attributes_to_permit = [
...
:sport_ids, # this is what was needed for just `user[sport_ids]` to work.
{ :sport_ids => [] } # this is needed for sport_ids non-empty arrays to work
...
]
params.require(:user).permit(user_attributes_to_permit)
现在我可以通过仅传递sport_ids
(没有'='和值!ie ...&amp; user [sport_ids]&amp;来重置用户的user[sport_ids]
数组; ... )在我的查询参数中。