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

Mag*_*gne 2 ruby arrays parameters ruby-on-rails http

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

"通常Rails会忽略重复的参数名称.如果参数名称包含一组空的方括号[],那么它们将被累积在一个数组中." - 导轨指南

但是当使用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)
Run Code Online (Sandbox Code Playgroud)

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

categories=one&categories=two&categories=three
Run Code Online (Sandbox Code Playgroud)

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

categories[]=one&categories[]=two&categories[]=three
Run Code Online (Sandbox Code Playgroud)

为什么?

我可以看到它与最近实现的set_form_data使用的URI.encode_www_form方法有关.但是偏离传统Rails方式的目的是什么?

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

Mag*_*gne 7

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

data = {'categories[]' => [one, two, three]}
Run Code Online (Sandbox Code Playgroud)

它甚至可以在数据哈希的其他元素的情况下工作:symbols.

我仍然很想知道为什么Rails在使用这个Net::HTTPHeader::set_form_data方法时需要这个"hack" ,以获得Rails在url参数中处理数组的传统方式.