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方法)?
我发现解决方案就像更改表名一样简单:
data = {'categories[]' => [one, two, three]}
Run Code Online (Sandbox Code Playgroud)
它甚至可以在数据哈希的其他元素的情况下工作:symbols.
我仍然很想知道为什么Rails在使用这个Net::HTTPHeader::set_form_data方法时需要这个"hack" ,以获得Rails在url参数中处理数组的传统方式.