2013-05-23 4 views
1

RABL Текущий код:RoR API коллекция 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" 
     } 
    ] 
} 

Я хочу, чтобы удалить имя атрибута и просто отображать значения как массив Но что Я хочу преобразовать коллекцию в массив, такой как вывод здесь:

{ 
    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 он отображает только первый элемент, как я сделать это массив со всеми элементами?

ответ

0

Это потому, что вы использовали объект @region, когда вы должны были использовать коллекцию @region

+0

Номер Один объект область имеет массив субрегионов, но есть только один регион. –

0

Для тех, кто ленив роуминга вокруг решения, как я, как и RABL находится на вершине рубина базы коды вы можете сделать что-то вроде:

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 
2

Джо Найяр имел правильную идею в своем ответе, но есть более чистый способ, чем с помощью object false.

child :sub_regions do 
    attributes :name 
end 

становится ...

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