在我们的客户端上,我们按如下方式将一个POST主体发送到Rails上的路由:
names[0][name]=Joe Random&names[0][id]=123&names[1][name]=Joe Random2&names[1][id]=124
这是在真实请求中正确编码,只是想显示它应该是什么样子。在处理此请求的操作中,我们会在记录params[:names]
时看到我们期望的结果:
{"0"=>{"name"=>"Joe Random", "id"=>"123"}, "1"=>{"name"=>"Joe Random2", "id"=>"124"}}
但是,如果这个POST主体变得非常大,就像这样:
names[0][name]=Joe Random&names[0][id]=123
... names[5000][name]=Joe Random5000&names[5000][id]=5124
我们记录params[:names]
,它现在是nil
,即使您可以通过记录request.raw_post
看到POST正文。此外,大或小请求中的数据没有什么异常,因为我可以手动解析它。
任何人都知道为什么会这样?如果有帮助,我会protect_from_forgery
开启。另外,我在Rails 3.0.9上。