【问题标题】:Rails json/jbuilder - Group json view based on categoryRails json/jbuilder - 基于类别的分组 json 视图
【发布时间】:2017-11-08 14:20:08
【问题描述】:

我有一个用 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"
            }]
        }
    }
},

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

【问题讨论】:

  • 您的第二个示例是无效的 json 格式。你不能这样输出。
  • 我不明白,我的输出无效?
  • 我想对类别进行分组。我有 4 种类别,有 24 个不同的纪念碑。我该怎么做?
  • 纪念碑和类别是如何关联的?您在控制器中获取数据的查询是什么?
  • 类别 has_many 纪念碑。和纪念碑belogs_to 类别。什么控制器和什么动作?

标签: ruby-on-rails json ruby jbuilder


【解决方案1】:

你需要做这样的事情

在您的控制器中,

@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

【讨论】:

  • 在动作索引中?
  • 但我已经在索引操作中有这个:@categories = Category.all
  • Category.includes(monuments: :pois)替换它,因为你的查询是n+1
猜你喜欢
  • 1970-01-01
  • 2014-01-18
  • 1970-01-01
  • 2015-09-05
  • 2020-09-05
  • 2014-11-23
  • 1970-01-01
  • 2015-04-20
  • 2012-10-03
相关资源
最近更新 更多