bra*_*ing 4 respond-with ruby-on-rails-3.1
我有一条路线,例如
POST /interaction.json
Run Code Online (Sandbox Code Playgroud)
客户发布新交互的位置.通常我的控制器看起来像
class InteractionController < ApplicationController
def create
respond_with @log
end
end
Run Code Online (Sandbox Code Playgroud)
我会得到一个json回复
{ "log" : { "id" : 20, .... } }
Run Code Online (Sandbox Code Playgroud)
并且位置标头设置为
http://foo.com/log/20
Run Code Online (Sandbox Code Playgroud)
但是,如果我希望在我的:json响应中返回更多对象,而不仅仅是@log.例如,通知客户端某些事情已发生变化,这与正常的交互相关.也许用户赢得了进行这种互动的奖励.能够这样做会很高兴
response_with @log, @prize
Run Code Online (Sandbox Code Playgroud)
并得到回应
{ "log": { "id": 20, ... },
"prize": { "id": 50, ...}
}
Run Code Online (Sandbox Code Playgroud)
但这不是response_with的工作方式.它将@prize视为@log的嵌套资源.任何人都可以提出这个想法吗?
合并两个独立对象是危险的,并将覆盖调用者中的任何现有属性.
相反,您可以始终包装对象并使用包装器进行响应:
@response = {:log => @log, :price => @price}
respond_with @response
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4007 次 |
| 最近记录: |