1

RABL 当前代码:

object @region
attributes :id, :name, :latitude, :longitude, :region_id
child :sub_regions do
  attributes :name
end

我得到以下输出:

{
    "id": 1,
    "name": "test",
    "latitude": "30.932351",
    "longitude": "92.83391",
    "region_id": 1,
    "sub_regions": [{
            "name": "1"
        }, {
            "name": "2"
        }, {
            "name": "3"
        }, {
            "name": "4"
        }, {
            "name": "5"
        }, {
            "name": "6"
        }, {
            "name": "7"
        }
    ]
}

我想删除 name 属性并将值显示为数组但我想要将集合转换为数组,如此处的输出:

{
    id: 1,
    name: "test",
    latitude: "30.932351",
    longitude: "92.83391",
    region_id: 1,
    sub_regions: [
            "1",
            "2",
            "3",
            "4",
            "5",
            "6",
            "7"
    ]
}

我能得到的最接近的是这个 RABL 代码:

code :sub_regions do |s|
  s["name"]
end


{
    {
          id: 1,
          name: "test",
          "latitude": "30.932351",
          "longitude": "92.83391",
          region_id: 1,
          sub_regions: "1"
    }

}

通过上面 show.json.rabl 中的代码块,它只显示第一个元素,我如何使它成为一个包含所有元素的数组?

4

3 回答 3

2

joe nayyar 在他的回答中提出了正确的想法,但有一种比使用更清洁的方法object false

child :sub_regions do
  attributes :name
end

变成……

node :sub_regions do |region|
  region.sub_regions.collect(&:name)
end
于 2014-10-03T19:52:32.740 回答
0

这是因为你在应该使用集合 @region 时使用了对象 @region

于 2013-06-05T22:35:21.743 回答
0

对于像我这样懒惰地四处寻找解决方案的人,因为 RABL 位于 ruby​​ 代码库之上,您可以执行以下操作:

object false 
node :region, :object_root => false do 
{:id => @region.id, :name => @region.name, :latitude=> @region.latitude, :region_id =>  @region.region_id, :sub_regions=>@region.sub_regions.collect(&:name)}
end
于 2013-08-30T14:07:03.833 回答