ruby - 以相同的 JSON 父项和子项返回数据库结果

标签 ruby json activerecord sinatra

我有 Team 和 Players 类,我想以一个 JSON 字符串的形式返回数据,其中包含 Team 信息,但同时显示有关球员的所有信息。

class Team < ActiveRecord::Base
  has_many :players
end

class Players < ActiveRecord::Base
  belongs_to :team
end

我知道如何检索有关球队和球员的信息,但不是在同一个查询中。另一个问题是我不知道如何将结果 JSON 合并到一个 JSON 中。

team = Team.last.to_json
player = team.players.to_json
  1. 如何在同一查询中查询有关团队和球员的信息。我试过:

    @team = Team.includes(:players).where(players: {team_id: Team.last}).last.to_json
    

    它只返回有关团队的信息。我想要一个像这样的 JSON:

    -id
    -name
    -players
        -player
        -player
    
  2. 如果不可能,我如何将来自两个查询的所有信息合并到一个 JSON 中。

最佳答案

你可以写一个“join”来将球队中的球员与球队信息结合起来。届时,您将拥有一个包含创建 JSON 所需信息的结构。有关详细信息,请参阅 Active Record 文档中的“12 Joining Tables”。

或者,您可以进行两个单独的查询,然后创建稍微复杂一点的 JSON 散列或数组,以便将两组数据输出到一个更大的序列化对象中。例如:

require 'json'

team = {
  'name' => 'bears'
}

players = {
  '1' => 'fred',
  '2' => 'joe'
}

puts ({
  'team' => team,
  'players' => players
  }).to_json

这是输出:

{"team":{"name":"bears"},"players":{"1":"fred","2":"joe"}}

这是返回给 Ruby 对象的数据:

data = '{"team":{"name":"bears"},"players":{"1":"fred","2":"joe"}}'
JSON[data]
# => {"team"=>{"name"=>"bears"}, "players"=>{"1"=>"fred", "2"=>"joe"}}

此外,由于您使用的是 Sinatra,因此没有必要使用 Active Record。 Sequel是一个非常好的 ORM,在使用 Sinatra 时是我个人最喜欢的。您可能会发现它更易于使用。

关于ruby - 以相同的 JSON 父项和子项返回数据库结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26467474/

相关文章:

asp.net - 为什么 Time.strptime() 返回当前日期?

ruby-on-rails - 更改回形针附件上集成测试的路径

android - 从 Android 中存储在 JSONString 中的 URL 在 ImageView 中加载图像

javascript - JSON JavaScript 不起作用?

ruby-on-rails - Rails has_many 通过多态计数器缓存

mysql - 在数据库模式设计方面需要帮助以获取打印厂产品选项

ruby - 从 xcode 构建阶段脚本执行 ruby​​ 脚本的正确方法是什么?

ruby-on-rails - 使用 CanCan 通过父关联授权子对象

python3将文件(从文件夹和子文件夹)转换为特定格式的json文件(项目包括文件夹名称和文件名)

ruby-on-rails - 通过一次迁移更改更改多个列