4

アプリケーション/jsonのPOSTリクエストを送信します:

curl 'http://127.0.0.1:3000/api/flowers/growth' -H 'Content-Type:application/json' -d '{"type": 1}'

次に、request.request_parametersを使用すると、出力は次のようになります。

{"type"=>1, "flower"=>{}}

「花」=>{}が自動的に追加されるのはなぜですか?

コントローラ情報を含めずに、POSTデータのみを取得するにはどうすればよいですか?

4

4 に答える 4

3

さて、この正確な問題に何時間も苦労し、コールスタックを掘り下げた後、答えを見つけました。

まず、この問題を解決したかったのは、有効な値を受け入れて他の要素を無視するのではなく、無効な要素が使用された場合に送信者にフィードバックを提供したかったからです。このため、このページの他の解決策はうまくいきません。

したがって、この問題の要点は、 にある と呼ばれるものActionController::ParamsWrapperですactionpack-4.2.3/lib/action_controller/metal/params_wrapper.rb。このコードは、コントローラのリクエスト パラメータをコントローラの名前でラップして、アクセスを容易にします。ただし、専用の API JSON インターフェースを使用している場合、これは状況を悪化させるだけです。

この熱心な「ヘルパー」に迷惑をかけるように指示するには、コントローラーに次の行を追加します。

wrap_parameters format: []

于 2015-08-13T04:27:45.847 に答える
1

slice探しているパラメータだけを取得するために使用できます。

request.request_parameters.slice(:type) #=> { 'type' => 1 }

paramsの省略形としても使用できますrequest.request_parametersparamsただし、いくつかの追加情報があります。

于 2012-06-25T14:47:04.747 に答える
-1

usingparams.sliceまたは類似の方法が実行可能でなく (どのパラメーターが渡されるかわからない場合があります)、POST パラメーターのみを取得する必要がある場合が多くあります。このような場合、request.POSTコントローラー内で使用できます。

于 2014-05-24T22:14:22.337 に答える
-1

ねえ、どうしてparamsハッシュを使わないの?

params[:type]
于 2012-06-25T15:10:15.757 に答える