Rails request_parameters包含控制器信息,如何仅获取 POST 数据



我发送一个应用程序/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"=>{}}

为什么会自动添加"花"=>{}?

如何只能获取开机自检数据,不包括控制器信息

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

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

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

要告诉这个热心的"助手"窃听器,请将以下行添加到您的控制器:

wrap_parameters format: []

您可以使用

slice来获取您要查找的参数:

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

您也可以使用params作为request.request_parameters的简写。 不过,params还有一些额外的信息。

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

params[:type]

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

最新更新