2014-11-17 42 views
0

我正在寫兩種類型的端點API:單一和聚合。我對單一端點Rabl的看法,下面:如何在RABL中創建自定義的「包含」JSON?

# cat_view.json.rabl 
object @cat 
attributes :name 

# dog_view.json.rabl 
object @dog 
attributes :name 

如預期這些工作,但是我與總Rabl的觀點掙扎。該JSON結構我想要的是:

{ 
    'cats': { 
    'details': [{'name': 'Mittens'}, 
       {'name': 'Mr. Wiskers'}, 
       {'name': 'Crookshanks'}], 
    'count' : 3 
    }, 
    'dogs': { 
    'details': [{'name': 'Rover'}, 
       {'name': 'Fido'}], 
    'count' : 2 
    } 
} 

我現在的總Rabl的觀點是:

# animals.json.rabl 
child @cats do 
    collection @cats, :object_root => false 
    extends "cat_view" 
end 
node(:cat_count) { @cats.count } 

child @dogs do 
    collection @dogs, :object_root => false 
    extends "dog_view" 
end 
node(:dog_count) { @dogs.count } 

導致該JSON:

{'cats': [{'name': Mittens'}, 
       {'name': Mr. Wiskers'}, 
       {'name': Crookshanks'}], 
    'cat_count': 3, 
    'dogs': [{'name': 'Rover'}, 
      {'name': 'Fido'}], 
    'dog_count': 2} 

我的問題:

我的animals.json.rabl應該如何查看上面描述的JSON結構?

回答

2

爲了添加details鍵,命名您的現有child @catsdetails

# animals.json.rabl 
child :cats do 
child @cats => :details do 
    collection @cats, :object_root => false 
    extends "cat_view" 
    node(:count) { @cats.count } 
end 
end 

child :dogs do 
child @dogs => :details do 
    collection @dogs, :object_root => false 
    extends "dog_view" 
    node(:count) { @dogs.count } 
end 
end 

child @cats => :details do 
    collection @cats, :object_root => false 
    extends "cat_view" 
    node(:count) { @cats.count } 
end 

對於你的問題的嵌套部分,你可以通過創建一個新的包裝子塊做到這一點

相關問題