我有一个路由,例如
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的嵌套资源。有人能给点建议吗?
合并两个独立的对象是危险的,并且会覆盖调用者中的任何现有属性。
相反,您可以总是包装对象并使用包装器响应:
@response = {:log => @log, :price => @price}
respond_with @response
假设@log
和@prize
都是哈希,您可以合并这两个哈希并返回合并结果。
respond_with @log.merge(@prize)
我认为它可能覆盖@log.id
与@prize.id
虽然。