2011-09-20 50 views
4

多个对象我有例如如何respond_with在Rails的3.1

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的嵌套资源。任何人都可以提出一个想法吗?

回答

9

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

相反,你总是可以包装的对象,并与包装,而不是回应:

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

假设@log@prize都是哈希,你可以merge两个散列,并返回合并。

respond_with @log.merge(@prize) 

我想它可能覆盖@log.id@prize.id虽然。如果可以,可以尝试其他方法。