RoR API RABL集合到数组

时间:2013-05-23 14:07:42

标签: json ruby-on-rails-3 api rabl

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中的上述代码块,它只显示第一个元素,如何使其成为包含所有元素的数组?

3 个答案:

答案 0 :(得分:2)

joe nayyar在他的回答中有正确的想法,但是比使用object false更简洁。

child :sub_regions do
  attributes :name
end

...变为

node :sub_regions do |region|
  region.sub_regions.collect(&:name)
end

答案 1 :(得分:0)

这是因为当你应该使用集合@region

时,你使用了对象@region

答案 2 :(得分: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