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

时间:2012-06-25 14:43:05

标签: ruby-on-rails request

我发送了一个application / json post请求:

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 个答案:

答案 0 :(得分:2)

好吧,在我自己努力解决这个问题几个小时,并通过调用堆栈挖掘后,我找到了答案。

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

因此,问题的核心是ActionController::ParamsWrapper,称为actionpack-4.2.3/lib/action_controller/metal/params_wrapper.rb,可在wrap_parameters format: []中找到。此代码将控制器名称中的控制器请求参数包装为使访问更容易。但是,如果你有一个专用的api JSON接口,这只会让生活变得更糟。

要告诉这个急切的“帮助者”,请将以下行添加到您的控制器:

List<Student> myStudent = studentsList.stream() .filter(s -> s.name.equals("George")) .collect(Collectors.toList());

答案 1 :(得分:1)

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

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

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

答案 2 :(得分:-1)

老兄,比如,你为什么不使用params哈希?

params[:type]

答案 3 :(得分:-1)

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