2011-06-17 49 views
1

我使用由机架给出的POST方法发送一个多维数组::测试样如何使用机架::测试后

post "#{url}.json",:data => [["Company","Website"],["this is the dummy text, with,comma","www.technology.com"],["some company","www.url.com"]]

但在我的控制器发送一个多维数组时检查我的PARAMS params[:data]我收到它作为单维阵列["Company", "Website", "this is the dummy text, with comma", "www.technology.com", "some company", "www.url.com"]

但我希望它保留它的属性作为一个多维数组。我需要帮助来做到这一点。

回答

1

机架::测试方法都具有相同的签名......而第二参数是则params的哈希

post '/path', params={}, rack_env={} 

这是因为他们只是网址参数 - 这是典型的键/值结构(即哈希) 为什么你需要它是一个多维数组?

编辑:哦,我明白了 - 你有一个关键的一个散列(:数据)

如果它仍然造成你的悲伤,你可以显式调用to_param在那里

ruby-1.9.2-p180 :003 > h = {:data => [["Company","Website"],["this is the dummy text, with,comma","www.technology.com"],["some company","www.url.com"]]} 
=> {:data=>[["Company", "Website"], ["this is the dummy text, with,comma", "www.technology.com"], ["some company", "www.url.com"]]} 
ruby-1.9.2-p180 :004 > h.to_param 
=> "data[][]=Company&data[][]=Website&data[][]=this+is+the+dummy+text%2C+with%2Ccomma&data[][]=www.technology.com&data[][]=some+company&data[][]=www.url.com" 
+0

谢谢你的努力。虽然它是按照以下格式作为关键值对发送的。 ':data => [[],[],[]]'我想让值部分保留它的属性,因为多维数组有什么办法呢?我非常需要它作为一个数组来避免我的控制器中的另一个解析方法。 – Xecutioner 2011-06-17 06:01:55

+0

可能需要抓取Rack :: Test的源代码并添加进一步的测试 - 看起来2d阵列从未在@ brynary的规格中测试过 https://github.com/brynary/rack-test/blob/ master/spec/rack/test/utils_spec.rb#L32 – mylescarrick 2011-06-17 06:16:22

+0

现在当我通过h时,我在控制器中得到''data'=> [nil,nil,nil,nil,nil,nil]'' .to_params – Xecutioner 2011-06-17 06:31:57

0

一种解决方法如果你真的需要嵌套数组是请求内容类型更改为JSON:

post url, JSON.dump([[1, 2], [3, 4]]), { "CONTENT_TYPE" => "application/json" } 

这将通过正确的机架应用程序发送一个嵌套数组。

相关问题