これは長い質問ですので、把握に時間がかかる場合はお詫び申し上げます。できるだけシンプルにしておきます。
私はここで少し必死になり始めていますが、私はとても近くにいます。私はしばらくの間Rubyと格闘していて、postとnet::httpと通信しています。だから私が今持っているのはハッシュがjsonに変換されていることです。net :: httpからのPOSTリクエストを使用してネットワーク経由で送信され、それをオブジェクトに戻そうとしています。
私が調査したルートの1つは、アクティブレコードとアクティブリソースでしたが、双方でいくつかの問題が発生した後、独自のモデルを定義し、変換方法を検討して送信することにしました。
私のモデル
このモデルはcustomRequestと呼ばれます。その中に、2つのクラス変数をハッシュに取り込んでjsonに変換し、それを送信するpost_meがあります。
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
1つは送信されたハッシュからオブジェクトを再作成しようとしたことと、もう1つはhash_to_jsonをhash_from_jsonに再作成しようとしたことを除いて、すべてほとんど同じです。
さらに質問を
それで:
- params(:myHash)を使用してオブジェクトを正しく作成していますか、それとも各変数を個別に参照する必要がありますか?
- paramsは自動的に読み取り可能な形式に戻されますか、それともJSONに入れたり、JSONを解析したりする必要がありますか?それに関して、私がどちらを使うかは重要ですか?
- オブジェクトを正しく再構築していますが、何も表示されないのはなぜですか?
- (オプション)その後、テーブルに保存する簡単な方法はありますか?