Rails 3.1で複数のオブジェクトをrespond_withする方法

respond-with ruby-on-rails-3.1
Rails 3.1で複数のオブジェクトをrespond_withする方法

例えばルートがあります

POST /interaction.json

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

class InteractionController < ApplicationController

    def create
        respond_with @log
    end

end

そして、私はjson応答を返します

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

に設定された場所ヘッダー

http://foo.com/log/20

ただし、@ logよりも多くのオブジェクトを:json応答で返したい場合。 たとえば、通常のこの相互作用に関して何らかの変更が行われたことをクライアントに通知する場合。 おそらく、ユーザーはこの対話を行うことで賞を獲得したでしょう。 できるといいですね

response_with @log, @prize

そして応答を得ます

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

しかし、それはrespond_withの動作方法ではありません。 @prizeは@logのネストされたリソースとして扱われます。 誰もこれのアイデアを提案できますか?

  4  1


ベストアンサー

2つの独立したオブジェクトのマージは危険であり、呼び出し元の既存の属性をオーバーライドします。

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

@response = {:log => @log, :price => @price}
respond_with @response

9


@ log`と @ prize`が両方ともハッシュであると仮定すると、http://www.ruby-doc.org/core/classes/Hash.html#M000759 [merge]両方のハッシュがマージを返します。

respond_with @log.merge(@prize)

しかし、@ might_が @ log.id`を @ prize.id`で上書きすると思っています。 何か他のものを試すことができます。

1


タイトルとURLをコピーしました