如何在HTTP请求查询参数中指示空数组?

时间:2014-11-07 18:57:46

标签: ruby-on-rails query-parameters

这是Rails在查询参数中接受数组的方式:

PUT /resource.json?sport_ids[]=133&sport_ids[]=64&sport_ids[]=71 ...

我试图谷歌这个问题,但没有找到任何明确的文档:

如何告诉Rails我们希望sport_ids变为空(通过查询参数传递空的sport_ids数组)?

2 个答案:

答案 0 :(得分:2)

您可以避免发送params["sport_ids"]并修改控制器:

params["sport_ids"] ||= []

使用put / post请求的最佳做法是在请求体(json / xml)中传递这样的数据,如:

  {
    "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 ...& user [sport_ids]&来重置用户的user[sport_ids]数组; ... )在我的查询参数中。