因此,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/