我如何" group"设置在Rails' JBuilder的?

时间:2015-04-14 19:05:49

标签: ruby-on-rails ruby json jbuilder

我的RoR应用程序(一个JSON API)中有一组代表运动队的“玩家”和“团队”模型,其中“名册”模型充当了多对多关系中的中间人。在“名单”视图中,我试图通过团队用jbuilder对玩家进行“分组”,但我无法找到正确的代码来执行此操作。

我当前的jbuilder视图代码(index.json.jbuilder)如下所示:

json.rosters @rosters do |roster|
    json.team_id       roster.team.team_id
    json.team_name     roster.team.team_name
    json.player_id     roster.player.player_id
    json.first_name    roster.player.first_name
    json.last_name     roster.player.last_name
end

这会输出以下JSON:

{
    "rosters": [
        {
            "team_id": "1",
            "team_name": "Dallas Mavericks",
            "player_id": "1",
            "first_name": "Dirk",
            "last_name": "Nowitzki"
        },
        {
            "team_id": "1",
            "team_name": "Dallas Mavericks",
            "player_id": "2",
            "first_name": "Rajon",
            "last_name": "Rando"
        }
    ]
}

我的问题:如何让jbuilder以这种格式输出数据? :

{
    "rosters": [
        {
            "team_id": "1",
            "team_name": "Dallas Mavericks",
            "players": [
                {
                    "player_id": "1",
                    "first_name": "Dirk",
                    "last_name": "Nowitzki"
                },
                {
                    "player_id": "2",
                    "first_name": "Rajon",
                    "last_name": "Rando"
                }
            ]
        }
    ]
}

一些旁注:

  • 对于那些想知道为什么球队 - 球员关系是多对多的人,这是因为球员被允许改变球队。名单表包含开始日期和结束日期字段,表示球员在球队中的任期,代表球队随时间变化的名单;在上面的例子中没有显示这一点,因为没有杂乱的缘故。
  • 我可以在团队视图中更容易地做到这一点,但我不想在那里返回名册信息,因为它主要用于列出团队。如果我每次都包含名册内容,最终可能无条件地拉动大量数据。
  • 我正在使用Sequel作为我的ORM,而不是ActiveRecord,所以如果解决方案涉及在将源数据发送到jbuilder之前将其重复,我不确定是否会应用任何AR魔法。对所有这些来说还是比较新的。

0 个答案:

没有答案