私はWebサービスアプリを構築しており、エラーをより適切にデバッグするために、POSTされたJSONをユーザーに返送する422ページを適切に処理しようとしています。これを行うには、送信したJSONを取得するrequest.request_parametersを使用しますが、(私にとっては)有線で整理されており、元のデータだけでは実際には取得できません。
JSONとして送信するのはこれです。
{
"name":"New set intensity",
"properties":
[
{"uri":null,"value":"on"},
{"uri":"https://type.lelylan.com/properties/intensity","value":"100.0"}
]
}
request.request_parametersから取得するのはこれです。
{"{\"name\":\"New set intensity\",\"properties\":"=>{"{\"uri\":null,\"value\":\"on\"}, {\"uri\":\"https://type.lelylan.com/properties/intensity\",\"value\":\"100.0\"}"=>{"}"=>nil}}}
私の主な問題は、どういうわけかコンテンツがキーになり、これが再帰的に内部にあることです。クリーンなデータを取り戻す方法はありますか?どうもありがとう。
更新:この問題が発生する場所と理由をよりよく理解しようとしています。
私のコントローラーでは、私が知っている2つの利用可能な方法でアクセスしようとしました。
# request.body.read.inspect
"{\"name\":\"New set intensity\",\"properties\":[{\"uri\":\"not_valid\"}]}"
# request.request_parameters
{"{\"name\":\"New set intensity\",\"properties\":"=>{"{\"uri\":\"not_valid\"}"=>{"}"=>nil}}}
リクエストはカピバラからです
page.driver.post(@uri, @params.to_json)
コントローラはJSONのみを返すので、これが私が定義した方法です。'respond_to'と'respond_with'を入れず、リクエストを行うと、jsonビューshow.rabl.jsonがレンダリングされます。これにより、正しい形式を認識していると思います。
class FunctionsController < ApplicationController
before_filter
...
def index
...
end
def show
..
end
def create
body = JSON.parse(request.body.read)
@function = Function.new(body)
if @function.save
render 'show', status: 201, location: FunctionDecorator.decorate(@function).uri
else
render_422 "notifications.resource.not_valid", @function.errors
end
end
ありがとう。