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日志文件吗?是的,我刚刚将其添加到问题中