如何在Rails 3.1中响应多个对象

bra*_*ing 4 respond-with ruby-on-rails-3.1

我有一条路线,例如

POST /interaction.json
Run Code Online (Sandbox Code Playgroud)

客户发布新交互的位置.通常我的控制器看起来像

class InteractionController < ApplicationController

    def create
        respond_with @log
    end

end
Run Code Online (Sandbox Code Playgroud)

我会得到一个json回复

{ "log" : { "id" : 20, .... } }
Run Code Online (Sandbox Code Playgroud)

并且位置标头设置为

http://foo.com/log/20
Run Code Online (Sandbox Code Playgroud)

但是,如果我希望在我的:json响应中返回更多对象,而不仅仅是@log.例如,通知客户端某些事情已发生变化,这与正常的交互相关.也许用户赢得了进行这种互动的奖励.能够这样做会很高兴

response_with @log, @prize
Run Code Online (Sandbox Code Playgroud)

并得到回应

{ "log": { "id": 20, ... },
  "prize": { "id": 50, ...}
}
Run Code Online (Sandbox Code Playgroud)

但这不是response_with的工作方式.它将@prize视为@log的嵌套资源.任何人都可以提出这个想法吗?

Rya*_*ohr 9

合并两个独立对象是危险的,并将覆盖调用者中的任何现有属性.

相反,您可以始终包装对象并使用包装器进行响应:

@response = {:log => @log, :price => @price}
respond_with @response
Run Code Online (Sandbox Code Playgroud)