2011-10-21 9 views
1

シナリオ: 私はRailsサーバー側にボードモデルを持っており、AndroidデバイスはPOSTを介して特定のボードにいくつかのコンテンツを投稿しようとしています。最後に、サーバーはAndroidデバイスに応答を返す必要があります。Rails 3.1サーバーへのPOSTを手動で解析するにはどうすればよいですか?

POSTを手動で解析するにはどうすればよいですか?私はこの種の外部要求をどのように処理するのか分かりません。私はMetal、Middleware、HttpPartyを調べました。しかし、それらのどれも私がしようとしているものに合っていないようです。私が手動で解析したいのは、私が望む情報の一部がパラメータの一部ではないからです。

誰もこの問題に近づく方法を知っていますか?

また、SSLを後で使用することも考えていますが、これがどのように問題に影響しますか?

ありがとうございます! :)

+1

有用なものが見つかりました:http://rails.nuvvo.com/lesson/6377-action-controller-the-request-and-response-objects – jchenjc

答えて

-1

「手動」という意味が正確にわからない場合、投稿は通常、コントローラ内の「作成」または「更新」メソッドで処理されます。ボードモデルのコントローラをチェックし、適切な方法にコードを追加することができます。 paramsハッシュを使用してparamsにアクセスできます。

あなたは何をしようとしているのかを具体的に記述する必要があります。 :)

+0

私が手動で解析する理由は、いくつかの情報私は、パラメータの一部ではないことを願っています。 – jchenjc

0

ie9から私のレールアプリにクロスドメイン要求をしようとしていました。私は、ie9のXDRオブジェクトが、私たちがtext/plainに送ることができるcontentTypeを制限するので、手動でPOSTの本体を解析する必要がありました。​​(this post参照)。もともとコントローラで提供されたparamsハッシュを使用していましたが、AjaxリクエストでcontentTypeとdataTypeを制限しても、そのハッシュには正しい情報が含まれなくなりました。

上記のコメント(link)のURLに続いて、その情報を回復する方法を学びました。著者は、レールコントローラではのインスタンスを与える変数requestに常にアクセスできると述べています。私はrequest.query_stringを使用してリクエスト本体を取得しようとしましたが、空の文字列が返されました。 APIのスヌーピングのビットは、しかし、raw_postメソッドを明らかにした。そのメソッドは、私が必要としたものを正確に返しました!

"手動で解析する"場合は、request.raw_postによって返された文字列を繰り返し処理することができます。私は、Arthur Gunnが答えたthis questionの答えにあるように、Rack :: Utils.parse_nested_queryを使って、raw_postをハッシュに解析しました。ハッシュ形式になったら、そこに必要なものをすべて押し込み、それをparamsハッシュとマージすることができます。そうすることで、私のコントローラーではそれほど多くを変更する必要はありませんでした!

params.merge!(Rack::Utils.parse_nested_query(request.raw_post)) 

誰かを助ける希望!

関連する問題