Miguel Coelho
Miguel Coelho

Reputation: 93

Rails json/jbuilder - Group json view based on category

I have an web application maded in RoR. I need to provide the json to an mobile App. This is my code to generate the 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

The output is:

{
    "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"
            }]
        }
    }
},

My Problem is that i need to group the categories.

something like this:

{
    "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"
            }]
        }
    }
},

Any ideas how can i solve this problem?

Upvotes: 2

Views: 671

Answers (1)

Md. Farhan Memon
Md. Farhan Memon

Reputation: 6121

You need to do something like this

In your controller,

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

In your view,

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

Upvotes: 4

Related Questions