ruby-on-rails - 如何使用 POST 请求发送一个数组,该数组的参数名称包含一组空的方括号 []?

标签 ruby-on-rails arrays ruby http parameters

因此,Rails 通常会解析通过 HTTP Post 请求(表单)发送的传入数组,如下所示:

"Normally Rails ignores duplicate parameter names. If the parameter name contains an empty set of square brackets [] then they will be accumulated in an array." - Rails Guides

但是当使用 Net::HTTP.Post 向第三方服务 (API) 发送 Post 请求时,似乎没有遵循在 HTTP Post 请求中处理数组的约定。

这段代码:

data = {:categories => [one, two, three]}
http = Net::HTTP.new(uri.host, uri.port)
request = Net::HTTP::Post.new(uri.request_uri)
request.set_form_data(data)
response = http.request(request)

然后 set_form_data将像这样序列化数组:

categories=one&categories=two&categories=three

而不是像这样(我认为这是传统的 Rails 方式):

categories[]=one&categories[]=two&categories[]=three

为什么?

我可以看出这与最近实现的 URI.encode_www_form 有关方法set_form_data使用。但是偏离常规 Rails 方式的目的是什么?

而且,更重要的是,我如何轻松修改它以以后一种方式发送它(无需重载一堆固有的 Ruby/Rails 方法)?

最佳答案

我发现解决方案就像更改表名一样简单:

data = {'categories[]' => [one, two, three]}

如果数据散列的其他元素是 :symbols,它甚至可以工作。

我仍然很想知道为什么 Rails 在使用 Net::HTTPHeader::set_form_data 方法时需要进行这种“破解”,以获取 Rails 在其他方面处理数组的传统方式网址参数。

关于ruby-on-rails - 如何使用 POST 请求发送一个数组,该数组的参数名称包含一组空的方括号 []?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33960643/

相关文章:

ruby-on-rails - 如何从脚手架完成 rspec put Controller 测试

ruby-on-rails - Rails 不提供压缩的 SVG 文件

ruby - Ruby 中 '_'(下划线)的奇怪行为

ruby-on-rails - 你能通过三个属性找到吗?

ruby-on-rails - 如何在rails中更新推特

ruby-on-rails - Ruby on rails 如何在数组中找到与另一个数组中的项目匹配的第一个项目

arrays - vlookup 和绝对引用以及 lastrow VBA 的问题

Java 说这个方法有一个构造函数名称

java - 组合排序列表工作 7/10 次

ruby - Byebug 是否完全支持 Windows?