如何获得胜队?

时间:2018-07-23 06:39:07

标签: ruby-on-rails ruby api

我有Match和MatchStat。

Match(id: integer, team_a: integer, team_b: integer)

MatchStat(id: integer, match_id: integer, team_id: integer, points: integer)

例如,我需要获得team_id = 1的所有获胜比赛

match 1 = (team_a: 1, team_b:2)
match_stat 1 = (match_id: 1, team_id: 1, points: 45)
match_stat 2 = (match_id: 1, team_id: 2, points: 67)

match 2 = (team_a: 1, team_b:2)
match_stat 3 = (match_id: 2, team_id: 1, points: 54)
match_stat 4 = (match_id: 2, team_id: 2, points: 43)

2 个答案:

答案 0 :(得分:1)

未经测试,但是您应该可以通过以下方式找到它:

Match.find(1).match_stats.group(:match_id).select('MAX(points)')

我不明白为什么在这种情况下您应该使用单独的模型。您是否计划参加人数超过2位的比赛?否则,我只会将比分和获胜者存储在Match模型中。

答案 1 :(得分:0)

根据您提供的有限信息,我认为MatchStat模型不需要任何东西;它只会使事情复杂化。我将其废弃,仅将分数存储在matches表中:

Match(
  id: integer,
  team_a: integer,
  team_b: integer,
  team_a_points: integer,
  team_b_points: integer
)

要获得team_id = 1的所有获奖游戏,您可以执行以下操作:

Match.where(team_a: 1).where('team_a_points > team_b_points').or(
  Match.where(team_b: 1).where('team_b_points > team_a_points'))

如果您添加一些逻辑以始终确保team_a_points >= team_b_points,则可能会更简单一些。但这取决于你。