【发布时间】:2015-11-17 08:33:57
【问题描述】:
目标:
向 API 端点发送 POST 请求,并使用 Rails 修改该资源。我今天在这个错误上已经有将近 6 个小时没有运气了;有人可以指出我正确的方向吗?所有相关详细信息如下:
routes.rb 用于相关路由:post '/complete_transportation_request' => 'api/transportation/complete#complete_request'
api/transportation/complete_controller.rb(处理这个请求的方法:
def complete_request
@ride = Transportation.find(params["transportation"]["id"])
@ride.update(transportation_params)
end
我从中调用尝试的 POST 请求的文件:
require 'net/http'
require 'uri'
....
def test_post_request(result)
params = {"transportation"=>{"id"=>6, "state"=>"Complete"}}
url = URI.parse("http://localhost:3000/complete_transportation_request")
resp, data = Net::HTTP.post_form(url, params)
puts resp.inspect
puts data.inspect
puts resp.body
puts params
end
抛出错误:
ActiveRecord::RecordNotFound at /complete_transportation_request
找不到“id”=id 的交通工具
app/controllers/api/transportation/complete_controller.rb,第 10 行
``` ruby
5 @rides = ::Transportation.where(state: "Complete")
6 end
7
8
9 def complete_request
> 10 @ride = Transportation.find(params["transportation"]["id"])
11 @ride.update(transportation_params)
12 end
13
14 private
15
```
编辑 1:params 在故障点:
[2] pry(#<Api::Transportation::CompleteController>)> params
=> nil
编辑 2:故障点处的完整 pry 输出:
Started POST "/complete_transportation_request" for ::1 at 2015-08-23 19:58:49 -0700
Processing by Api::Transportation::CompleteController#complete_request as */*
Parameters: {"transportation"=>"{\"id\"=>\"6\", \"state\"=>\"Complete\"}"}
"Id = id"
From: .... line 11 Api::Transportation::CompleteController#complete_request:
9: def complete_request
10: p "Id = #{params["transportation"]["id"]}"
11: binding.pry
12: params = JSON.parse(params)
13: @ride = Transportation.find(params["transportation"]["id"])
14: @ride.update(transportation_params)
15: end
[1] pry(#<Api::Transportation::CompleteController>)> params
=> nil
编辑 3:我错过了什么?参数似乎就在请求的日志中!
Started POST "/complete_transportation_request" for ::1 at 2015-08-23 21:37:18 -0700
Processing by Api::Transportation::CompleteController#complete_request as */*
Parameters: {"id"=>"7", "state"=>"Complete"}
From: ...../app/controllers/api/transportation/complete_controller.rb @ line 11 Api::Transportation::CompleteController#complete_request:
10: def complete_request
=> 11: binding.pry
12: params = JSON.parse(params)
13: @ride = Transportation.find(params["transportation"]["id"])
14: @ride.update(transportation_params)
15: end
[1] pry(#<Api::Transportation::CompleteController>)> params
=> nil
【问题讨论】:
-
在
complete_request中尝试p params看看会发生什么。 -
能否请您在第 10 行之前添加这一行:
p "Id = #{params["transportation"]["id"]}",让我们知道会发生什么? -
params出现为零 - 我将使用该信息更新我的问题.. 所以参数在失败时为零,这一定是 POST 本身的问题,对吧? -
很可能...您介意在您的问题中添加 POST 事件的 rails 日志文件吗?
-
是的,我刚刚将其添加到问题中
标签: ruby-on-rails ruby json net-http