Rails 3.x アプリを実行しているサーバーにアクセスするモバイル アプリがあります。データは JSON 形式で交換されます。
私はかなり複雑な問題を抱えているので、ここで単純化しようとしています。
あるシナリオでは、モバイル アプリは、既存の注文レコードの更新を含む新しい販売レコードをデータベースに投稿します。これを単一の HTTP リクエストとして実現するために、ネストされた属性を介して新しい販売レコードの一部として注文レコード属性の更新を渡します。
Sales の Rails モデルには、次のものが含まれます。
attr_accessible :product_id, :order_id, :order_attributes
accepts_nested_attributes_for :order, :update_only => true
Rails ルーティングは標準です。
セールを投稿する http リクエストは新しいレコードを作成するため (つまり、既存の sale_id は含まれません)、HTTP POST を使用します。
新しい販売レコード (注文レコードの更新なし) を問題なく投稿できます。
ただし、ネストされた属性を含めて注文レコードを更新すると、404 'not found' が返されます。
これは、既存の注文のネストされた更新に「id」が含まれているため、実際には (正しくルーティングするために) PUT である必要があるためだと思われます。
問題を診断するために、既存の動作中のネストされていない販売の POST (ID を含まない) を PUT リクエストに変更しようとしましたが、その場合、機能が壊れ、404 が返されます. これは、サーバーが実際に PUT/POST の混乱を 404 として報告することを示唆しています。
明確にするために、同じコードを使用して他の状況でネストされた属性を使用して更新を正常に投稿できるため、問題は実際の属性エンコーディングではないと確信しています。
これが問題であるかどうか、もしそうなら、それについて何ができるかについて考えていただければ幸いです。
ありがとうございました。