在我的 rspec 测试中,我定义了以下哈希数组并执行了 POST:
body = {:event => { :invitations_attributes =>
[ {:recipient_id => 40}, {:email => 'a@a.com'}, {:facebook_id => 123456789} ] } }
post "#{@url}.json", body.reverse_merge(:auth_token => @token)
基于上述,我希望 Rails 服务器接收“invitations_attributes”作为哈希数组。但是,developer.log 文件具有以下内容:
Parameters: {"auth_token"=>"RSySKfN2L8b5QPqnfGf7", "event"=>{"invitations_attributes"=>
[{"recipient_id"=>"40", "email"=>"a@a.com", "facebook_id"=>"123456789"}]}}
(在上面的参数中,“invitation_attributes”数组只包含 1 个哈希。)
以下 curl 语句:
curl -X POST -H "Content-type: application/json" http://localhost:3000/api/v1/events.json -d '{"auth_token":"RSySKfN2L8b5QPqnfGf7","event":{"invitation_attributes":[{"recipient_id":40},{"email":"a@a.com"},{"facebook_id":123456789}]}}'
导致 Rails 接收完整的哈希数组,如下面的日志文件条目所示。
Parameters: {"auth_token"=>"RSySKfN2L8b5QPqnfGf7", "event"=>{"invitation_attributes"=>
[{"recipient_id"=>40}, {"email"=>"a@a.com"}, {"facebook_id"=>123456789}]}}
Rack/test 在 PUT 操作和 POST 中都表现出这种行为。
为什么 rack/test 将 3 个哈希合并为 1,而不是完全按照定义发送数组?是否有一个设置会导致 rack 表现出我预期的行为?