4

我发送一个应用程序/json 发布请求:

curl 'http://127.0.0.1:3000/api/flowers/growth' -H 'Content-Type:application/json' -d '{"type": 1}'

然后我使用request.request_parameters,输出为:

{"type"=>1, "flower"=>{}}

为什么会自动添加“flower”=>{}?

我怎样才能只获取 POST 数据,而不包括控制器信息

4

4 回答 4

3

好的,在我自己在这个确切的问题上苦苦挣扎了几个小时,并通过调用堆栈挖掘之后,我找到了答案。

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

所以问题的关键是这个叫做 的东西ActionController::ParamsWrapper,它位于actionpack-4.2.3/lib/action_controller/metal/params_wrapper.rb. 此代码将控制器的请求参数包装在控制器名称中,以使访问更容易。然而,如果你有一个专用的 api JSON 接口,这只会让生活变得更糟。

要告诉这个急切的“帮手”,请在您的控制器中添加以下行:

wrap_parameters format: []

于 2015-08-13T04:27:45.847 回答
1

您可以使用它slice来获取您正在寻找的参数:

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

也可以params用作request.request_parameters. params虽然有一些额外的信息。

于 2012-06-25T14:47:04.747 回答
-1

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

于 2014-05-24T22:14:22.337 回答
-1

伙计,你为什么不使用params哈希?

params[:type]
于 2012-06-25T15:10:15.757 回答