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

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

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

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

假设@logand@prize都是哈希,您可以合并两个哈希并返回合并。

respond_with @log.merge(@prize)

我认为它可能会覆盖@log.idwith @prize.id。可以的话可以试试别的。

于 2011-09-20T10:01:48.293 回答