如何在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, ...}
}

,但这不是respond_with的工作方式。它将@prize视为@log的嵌套资源。有人能给点建议吗?

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

相反,您可以总是包装对象并使用包装器响应:

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

假设@log@prize都是哈希,您可以合并这两个哈希并返回合并结果。

respond_with @log.merge(@prize)

我认为它可能覆盖@log.id@prize.id虽然。

相关内容

最新更新