4

たとえば、ルートがあります

POST /interaction.json

クライアントが新しいインタラクションを投稿する場所。通常、私のコントローラーは次のようになります

class InteractionController < ApplicationController

    def create
        respond_with @log
    end

end

json レスポンスが返ってきます

{ "log" : { "id" : 20, .... } }

および場所ヘッダーがに設定されています

http://foo.com/log/20

ただし、:json 応答で @log だけでなく、より多くのオブジェクトを返したい場合は. たとえば、このインタラクションに関して何らかの変更があったことをクライアントに通知するには、通常の操作を行います。おそらく、ユーザーはこのインタラクションを行うことで賞品を獲得しています。できるといいですね

response_with @log, @prize

そして応答を得る

{ "log": { "id": 20, ... },
  "prize": { "id": 50, ...}
}

しかし、それは Respond_with が機能する方法ではありません。@prize を @log のネストされたリソースとして扱います。誰かがこれについてのアイデアを提案できますか?

4

2 に答える 2

9

2 つの独立したオブジェクトをマージすることは危険であり、呼び出し元の既存の属性を上書きします。

代わりに、常にオブジェクトをラップして、代わりにラッパーで応答できます。

@response = {:log => @log, :price => @price}
respond_with @response
于 2011-12-08T23:09:19.617 に答える
1

とが両方のハッシュであると仮定する@logと、両方のハッシュをマージして、マージを返す@prizeことができます。

respond_with @log.merge(@prize)

私はそれがで上書きするかもしれないと思っています。もしそうなら、他の何かを試すことができます。@log.id@prize.id

于 2011-09-20T10:01:48.293 に答える