私はこれをしばらく見てきましたが、現在は紛失しています。私は問題をJSONに関連するものに絞り込み、JSONは見やすい形式で送信されているようには見えません。Rails 3.2 - ActiveResource - JSONでPOST/PUTを使用
以前はRails 3.0.7(私が記述しようとしている問題は存在しませんでした)を使用していました。いくつかの新しい機能を利用するためにRailsをアップグレードする必要がありますが、今はこの問題があります。私はこの時点でそれが簡単な構成か何かであるとほとんど確信していますが、私はそれについてもっと目を向ける必要があります。
私たちはActiveResourceオブジェクトを使用しています。オブジェクトの値を設定して保存すると(PUTを作成すると)、ab 403:ForbiddenがリモートWebサービスから返されます。これはWebサービス層では問題ありません。
新しいオブジェクトを作成してPOSTを実行すると、デフォルト値でデータベースを更新しようとすると、409:Conflictが返されます。つまり、jsonデータがサービスに到達していないことを意味します。
私の問題は、これがRails 3.0.7で動作し、3.2.3(または私も試した3.1.3)では動作しないということです。私はJSONデータ以外の提案にはオープンしていますが、それが問題のどこにあるのかはかなり確信しています。
マイActiveResourceモデルは
self.format = :json
は、私は私の初期化ファイルのいずれかに次のように持っている:任意の提案のための
ActiveResource::Base.include_root_in_json = false
ActiveSupport::JSON.backend = "json_gem"
感謝を!
UPDATE
私はカールと一緒にテストし、それがで動作するようになってきた:
curl -H "Content-Type: application/json" -d "{\"userID\":\"xxx\", \"label\":\"doc.test.test\", \"value\":\"1,19\", \"id\":\"-1\"}" -v -X POST http://host:port/usermanagement/users/xxx/prefs
私は仕事が、
に、コンテンツを表示されていることです-Typeヘッダーを明示的に設定する必要があります。それ以外の場合は415になります。Media Unrecognized error
ActiveResourceオブジェクトにContent-Typeヘッダーを設定しても、私はまだ409:Conflictエラーが発生します。これはJSONがまだ正しく構成されていないと信じさせます。 RailsはJSONに根を保っている -
EDIT(再び)
私は、JSONの問題がどこにあるか考え出しました。 したがって、代わりにそれはしかし、私はfalseにinclude_root_in_json
を設定している
{"ResourceName": {"name":"value", "name":"value"}}
を送信している
{"name":"value", "name":"value"}
として戻ってリソースを送信する - 私は、初期化ファイルで、直接モデル自体の両方でこれを試してみました、そして変化はない。
で修正されていますしかし、なぜ誰かが 'include_root_in_json'設定がうまくいかないというアイデアがあるなら、設定がより洗練された解決策であるとわかっているので、私はまだ非常に興味があります。ありがとう! – Krista
解決策を回答として追加し、それを受け入れることができます... – Smar
ありがとう!良いアイディア – Krista