我有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)
答案 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
,则可能会更简单一些。但这取决于你。