Rails json/jbuilder - 根据类别对 json 视图进行分组

Rails json/jbuilder - Group json view based on category

我有一个用 RoR 制作的 Web 应用程序。 我需要向移动应用程序提供 json。 这是我生成 Json:

的代码
json.category do
 json.name monument.category.name
 json.monumento do
  json.name monument.name
  json.id monument.id
  json.pois monument.pois do |p|
   json.name p.name
  end
 end
end

输出为:

{
    "category": {
        "name": "Igrejas",
        "monumento": {
            "name": "Igreja de Santa Maria do Olival",
            "id": 2,
            "pois": [{
                "name": "Igreja de Santa Maria do Olival"
            }]
        }
    }
},
{
    "category": {
        "name": "Igrejas",
        "monumento": {
            "name": "Igreja de São João Baptista",
            "id": 3,
            "pois": [{
                "name": "Igreja de São João Baptista"
            }]
        }
    }
},
{
    "category": {
        "name": "Igrejas",
        "monumento": {
            "name": "Igreja da Nossa Senhora da Graça",
            "id": 4,
            "pois": [{
                "name": "Igreja da Nossa Senhora da Graça"
            }]
        }
    }
},

我的问题是我需要对类别进行分组。

像这样:

{
    "category": {
        "name": "Igrejas",
        "monumento": {
            "name": "Igreja de Santa Maria do Olival",
            "id": 2,
            "pois": [{
                "name": "Igreja de Santa Maria do Olival"
            }]
        },
        "monumento": {
            "name": "Igreja de São João Baptista",
            "id": 3,
            "pois": [{
                "name": "Igreja de São João Baptista"
            }]
        },

        "monumento": {
            "name": "Igreja da Nossa Senhora da Graça",
            "id": 4,
            "pois": [{
                "name": "Igreja da Nossa Senhora da Graça"
            }]
        }
    }
},

有什么办法可以解决这个问题吗?

你需要做这样的事情

在你的控制器中,

@categories = Category.where(name: 'Igrejas').includes(monuments: :pois)

在您看来,

json.category @categories do |category|
  json.name category.name
  json.monuments category.monuments do |monument|
    json.name monument.name
    json.id monument.id
    json.pois monument.pois do |p|
      json.name p.name
    end
  end
end