Ruby on rails 发布JSON以通过API更新Rails资源
目标:Ruby on rails 发布JSON以通过API更新Rails资源,ruby-on-rails,ruby,json,net-http,Ruby On Rails,Ruby,Json,Net Http,目标: 向API端点发送POST请求,并使用Rails修改该资源。今天我已经犯了将近6个小时的错误,运气不好;有人能给我指一下正确的方向吗?所有相关详情如下: 路由。rb对于相关路由: post'/complete_transportation_request'=>“api/transportation/complete#complete_request” api/transportation/complete\u controller.rb(处理此请求的方法: def complete_req
向API端点发送POST请求,并使用Rails修改该资源。今天我已经犯了将近6个小时的错误,运气不好;有人能给我指一下正确的方向吗?所有相关详情如下: 路由。rb对于相关路由:
post'/complete_transportation_request'=>“api/transportation/complete#complete_request”
api/transportation/complete\u 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
抛出错误:
[2] pry(#<Api::Transportation::CompleteController>)> params
=> nil
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
ActiveRecord::RecordNotFound/complete\u请求
找不到id为的传输
app/controllers/api/transportation/complete_controller.rb,第10行
在故障点编辑1:params
:
[2] pry(#<Api::Transportation::CompleteController>)> params
=> nil
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
编辑3:我缺少什么?参数似乎就在请求日志中!
[2] pry(#<Api::Transportation::CompleteController>)> params
=> nil
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
于2015-08-23 21:37:18-0700为::1发布“/完成运输请求”
通过Api进行处理::传输::CompleteController#按请求完成*/*
参数:{“id”=>“7”,“state”=>“Complete”}
发件人:…/app/controllers/api/transportation/complete_controller.rb@line 11 api::transportation::complete controller#complete_请求:
10:def完成请求
=>11:binding.pry
12:params=JSON.parse(params)
13:@ride=Transportation.find(参数[“Transportation”][“id”])
14:@ride.update(运输参数)
15:完
[1] 撬动(#)>参数
=>零
编辑2中的问题:确保请求中的内容类型
和接受
标题都包含应用程序/json
,而不是例如文本/json
,或者您没有做一些奇怪的事情,比如在“传输”中插入json原始字符串基本HTTP表单中的文本字段。如果仍然有问题,请在末尾添加.json
,它可能会起作用
“编辑3”中出现问题,请尝试查找params['id']
而不是params['transportation']['id']
另外,你把不好的东西混合在一起,post_表单发送表单,就像在HTML页面上一样,Rails中的表单通常是嵌套的——它们有一个根节点,比如“transportation”,XML也是嵌套的,JSON不是嵌套的,除非你插入额外的中间件来强制它
使用curl
测试控制器:
curl -H "Content-Type: application/json" -H "Accept: application/json" -k -i -d '{"id": "2874"}' http://localhost:3000/complete_transportation_request.json
并使用find params['id']
来获取“编辑2”中的记录问题:确保请求中的content-type
和都接受头包含application/json
,而不是例如text/json
,或者您没有做一些奇怪的事情,比如在基本HTTP格式的“transportation”文本字段。如果仍然存在问题,请在末尾添加.json
,这样可能会起作用
“编辑3”中出现问题,请尝试查找params['id']
而不是params['transportation']['id']
另外,你把不好的东西混合在一起,post_表单发送表单,就像在HTML页面上一样,Rails中的表单通常是嵌套的——它们有一个根节点,比如“transportation”,XML也是嵌套的,JSON不是嵌套的,除非你插入额外的中间件来强制它
使用curl
测试控制器:
curl -H "Content-Type: application/json" -H "Accept: application/json" -k -i -d '{"id": "2874"}' http://localhost:3000/complete_transportation_request.json
然后使用find params['id']
获取记录尝试p params
在complete_request
中完成请求,看看会发生什么。请在第10行之前添加这一行:p“id=#{params[“transportation”][“id”}"
并让我们知道出现了什么?params
出现了零-我将用该信息更新我的问题..所以在失败点params为零,这一定是帖子本身的问题,对吗?很可能…你介意在你的问题中添加帖子事件的rails日志文件吗?是的,我刚刚将其添加到问题中试试p params
在中完成_请求
并查看接下来的内容。请在第10行之前添加这一行:p“Id=#{params[“transportation”][“Id”]}
并让我们知道出现了什么?params
出现了nil-我将用该信息更新我的问题..因此在失败点params为nil,这一定是帖子本身的问题,对吗?很有可能…您介意在您的问题中添加帖子事件的rails日志文件吗?是的,我刚刚将其添加到问题中