Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/64.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/dart/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails Rails请求参数包括控制器信息、如何仅获取POST数据_Ruby On Rails_Request - Fatal编程技术网

Ruby on rails Rails请求参数包括控制器信息、如何仅获取POST数据

Ruby on rails Rails请求参数包括控制器信息、如何仅获取POST数据,ruby-on-rails,request,Ruby On Rails,Request,我发送应用程序/json post请求: curl 'http://127.0.0.1:3000/api/flowers/growth' -H 'Content-Type:application/json' -d '{"type": 1}' 然后我使用request.request\u参数,输出为: {"type"=>1, "flower"=>{}} 为什么会自动添加“flower”=>{} 如何仅获取POST数据而不包括控制器信息?您可以使用切片仅获取所需的参数: reques

我发送应用程序/json post请求:

curl 'http://127.0.0.1:3000/api/flowers/growth' -H 'Content-Type:application/json' -d '{"type": 1}'
然后我使用request.request\u参数,输出为:

{"type"=>1, "flower"=>{}}
为什么会自动添加“flower”=>{}


如何仅获取POST数据而不包括控制器信息?您可以使用
切片
仅获取所需的参数:

request.request_parameters.slice(:type) #=> { 'type' => 1 }

您还可以使用
params
作为
request.request\u参数的缩写
params
还有一些额外的信息。

伙计,你为什么不使用
params
散列呢

params[:type]

在许多情况下,使用
params.slice
或类似方法是不可行的(您可能不知道将传入哪些参数),并且只需要获取POST参数。在这种情况下,您可以在控制器中使用
request.POST

好的,在我自己花了几个小时努力解决这个问题,并在调用堆栈中挖掘之后,我找到了答案

首先,我想解决这个问题的原因是,如果使用了无效元素,我想向发送者提供反馈,而不是只接受有效值而忽略其他值。出于这个原因,本页上的其他解决方案对我不起作用

所以问题的核心是一个叫做
ActionController::ParamsWrapper
的东西,它可以在
actionpack-4.2.3/lib/action\u controller/metal/params\u wrapper.rb
中找到。此代码以控制器的名称包装控制器的请求参数,以便于访问。然而,如果你有一个专用的api JSON接口,这只会让生活变得更糟

要让这个热心的“助手”走开,请在控制器中添加以下行:


wrap_参数格式:[]

参数将包括控制器信息、操作信息。我的意思是如何获取诸如PHP$\u POST之类的POST数据,我只想一次获取所有POST数据。因此,我不会使用params[:type]更改表单元素的格式。使用
代替
。这将允许您使用
参数[:thing]
。花更多时间了解Rails form parameters.thx。我知道params是request.request\u参数的缩写。我的意思是我只想获取POST数据,不包括控制器信息。现在我的解决方案是:post=request.request\u参数,post.delete('flower'),我正在寻找的post.request.request\u参数只是request.post的别名。在调用控制器时,ParamWrapper已经开始工作并添加了额外的元素。