我有一个例如
的路线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的嵌套资源。有人可以提出这个想法吗?
答案 0 :(得分:9)
合并两个独立对象是危险的,并将覆盖调用者中的任何现有属性。
相反,您可以始终包装对象并使用包装器进行响应:
@response = {:log => @log, :price => @price}
respond_with @response
答案 1 :(得分:1)
假设@log
和@prize
都是哈希值,您可以merge哈希并返回合并。
respond_with @log.merge(@prize)
我认为可能会用@log.id
覆盖@prize.id
。如果有的话可以尝试别的东西。