【发布时间】:2011-06-28 12:26:49
【问题描述】:
我正在创建一个非常简单的 Web 应用程序,我能够利用许多标准 Ruby on Rails 3 功能(添加和删除模型元素等)。
现在我想提供一个 REST 服务,它在一个流中返回元素的层次结构。
例如,在我的模型中:
- ProductType,它定义了允许的 ComponentType 组合。 例如:礼品篮,定义为有几个酒瓶和 3 个水果。
- 组件类型。 例如:水果、酒瓶等
- 组件:这些是 ComponentTypes 的体现。 例如:长相思、苹果、梨等。
现在我想提供一个“菜单”休息服务,它显示这些的层次结构。它应该看起来像这样:
"menu": [
{ "name":"Gift basket", "description":"some description", "price": 0, "isDefaultSelected": false, "isMultiselect":false ,"isContainer":true, "children":[
{ "name":"Wine", "description":"", "price": 0, "isDefaultSelected": false, "isMultiselect":false ,"isContainer":true, "children":[
{ "name":"Sauvignon Blanc", "description":"...", "price": 170, "isDefaultSelected": true, "isMultiselect":false, "isContainer":false },
{ "name":"Merlot", "description":"...", "price": 170, "isDefaultSelected": false, "isMultiselect":false ,"isContainer":false }
]
},
{ "name":"Fruit", "description":"Fruits...", "price": 0, "isDefaultSelected": false, "isMultiselect":false ,"isContainer":true, "children":[
{ "name":"Apple", "description":"...", "price": 170, "isDefaultSelected": true, "isMultiselect":false ,"isContainer":false },
{ "name":"Pear", "description":"...", "price": 170, "isDefaultSelected": false, "isMultiselect":false ,"isContainer":false }
]
}
]
}
由此,客户端将创建一个菜单,其中具有“isMultiselect”属性的项目是复选框。有些属性可以说是多余的(isMultiselect 可能只是位于层次结构的较高部分),但我们要求所有元素都相同。
所以我的问题是我是否应该创建一个新模型来表示我想在我们的 REST 服务中拥有的对象,或者我是否可以以符合上述 JSON 模式的方式呈现我拥有的对象。
【问题讨论】:
标签: ruby-on-rails ruby web-services json rest