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

时间:2011-09-20 09:45:05

标签: ruby-on-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

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

会很高兴
response_with @log, @prize

并获得回复

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

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

2 个答案:

答案 0 :(得分:9)

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

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

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

答案 1 :(得分:1)

假设@log@prize都是哈希值,您可以merge哈希并返回合并。

respond_with @log.merge(@prize)

我认为可能会@log.id覆盖@prize.id。如果有的话可以尝试别的东西。