这是一个很长的问题,所以如果需要一段时间才能掌握,我深表歉意。我会尽可能简单。
我在这里开始有点绝望,但我已经很接近了。我一直在努力使用 Ruby,并与 post 和 net::http 进行通信。所以我现在得到的是一个哈希被转换成 json。使用来自 net::http 的 post 请求通过网络发送,然后我试图将其转换回对象。
我探索的一条路线是活动记录和活动资源,但在双方遇到一些问题后决定定义我自己的模型,然后研究如何转换并发送它。
我的模特
此模型称为 customRequest。在其中我有 post_me,它将 2 个类变量转换为哈希,将其转换为 json,然后发送它。
class CustomRequest
require 'json'
require 'net/http'
attr_accessor :myString, :myInteger
def initialize(myString,myInteger)
@myString = myString
@myInteger = myInteger
end
def post_me
@myReq = {:myString => @myString, :myInteger =>@myInteger}
myJsonReq = @myReq.to_json
#myJsonReq = JSON.generate(@myReq)
puts myJsonReq
# res = Net::HTTP.post_form(URI.parse('http://127.0.0.1:3008/user_requests/add'),
# myJsonReq)
res = Net::HTTP.post_form(URI.parse('http://127.0.0.1:3008/user_requests/add.json'),
myJsonReq).as_json
end
end
简而言之,这就是自定义请求。
问题
我担心的位是:
- 接收 URL,我写了 add.json,因为格式是在控制器路由中确定的。不知道有没有必要?
- 从变量生成哈希并将其发送以进行重建更好还是将整个类转换为_json并发送它更好?
如果我在 rails 控制台中按原样创建类并发送它,我会在终端中得到一个不错的 200 和响应。
更多细节
(注意:如果您真的想知道场景中发生了什么,请仅阅读此部分)
@test.post_me
{"myInteger":300,"myString":"testestest"}
=> {"x-ua-compatible"=>["IE=Edge"], "etag"=>["\"d41d8cd98f00b204e9800998ecf8427e\""], "connection"=>["Keep-Alive"], "content-type"=>["application/json; charset=utf-8"], "date"=>["Thu, 14 Jul 2011 15:54:24 GMT"], "server"=>["WEBrick/1.3.1 (Ruby/1.8.7/2009-06-12)"], "x-runtime"=>["0.022517"], "content-length"=>["0"], "set-cookie"=>["_webApp_session=BAh7BiIPc2Vzc2lvbl9pZCIlZTJmM2IwYmVhZWMwM2E2ZGQzNWEwMDUwNmE2NDhlM2U%3D--5312eec4795d9f0633520c01992422e9c15746e4; path=/; HttpOnly"], "cache-control"=>["max-age=0, private, must-revalidate"]}
>>
继承人相同的响应如果我不将其转换为 Json:
{"myInteger":300,"myString":"testestest"}
=> #<Net::HTTPOK 200 OK readbody=true>
请如果有人可以回答问题1和2我会很高兴
服务器端
这是需要接受请求并将其转换回 Json 和对象的服务器端。我尝试了很多不同的东西,大多数都被注释掉了。
基本上我会得到一个带有标签中详细信息的 200 响应,但是当我尝试放置散列对象时,我什么也得不到/
Started POST "/user_requests/add" for 127.0.0.1 at Thu Jul 14 16:56:07 +0100 2011
Processing by UserRequestsController#add_request as
Parameters: {"{\"myInteger\":300,\"myString\":\"testestest\"}"=>""}
Rendered user_requests/add_request.json.erb (0.3ms)
Completed 200 OK in 31ms (Views: 27.4ms | ActiveRecord: 0.0ms)
这是将其分解并将其变回对象的多次尝试。
def add_request
require 'rubygems'
require 'json'
#@custom = CustomRequest.new(params[:custom])
#@custom = CustomRequest.new(JSON.parse(params[:custom]))
#@custom = CustomRequest.new(params[:custom]).from_json
#@custom = CustomRequest.new(params[:custom].from_json)
@myHash = Hash.new(params[:myHash])
#@myHash = Hash.new(JSON.parse(params[:myHash]))
#@myHash = Hash.new(params[:myHash]).from_json
#@myHash = Hash.new(params[:myHash].from_json)
puts "IT WORKS!"
puts @myHash.to_s
它们几乎都一样,除了一个是我试图从发送的哈希重新创建对象,另一个是我试图重新创建 hash_to_json 到 hash_from_json
更多问题
所以:
- 我是使用 params(:myHash) 正确创建对象还是应该单独引用每个变量?
- 参数是否会自动转换回可读格式,还是我需要从 JSON 转换或解析 JSON。关于这一点,我使用哪一个有关系吗?
- 我是否正确地重建了对象,为什么我没有显示任何内容?
- (可选)此后有没有简单的方法将其存储在表格中?