我有一个名为 Game 的模型,我在其中构建了一个范围查询。
就像是:
games = Game.scoped
games = games.team(team_name) if team_name
games = game.opponent(opponent_name) if opponent_name
total_games = games
然后我计算几个子集,如:
wins = games.where("team_score > opponent_score").count
losses = games.where("opponent_score > team_score").count
一切都很好。然后我决定要限制原始范围以显示最后 X 场比赛。
total_games = games.limit(10)
如果有 100 个游戏与我想要的 total_games 匹配,然后我添加 .limit(10) - 它会得到最后 10 个。太好了。但现在打电话
total_games.where("team_score > opponent_score").count
将回到过去 10 次之后,并进入不属于 total_games 的结果。自从添加 .limit(10) 后,我将始终获得 10 场总比赛,但也是 10 胜和 10 负。
全部输入后,我意识到我想使用 limit 的情况是为了显示一组较小的结果 - 所以我可能最终只是循环遍历结果来计算诸如赢和输之类的东西(而不是像我上面的子集中那样做单独的查询)。
当 total_games 有数百或数千个结果时,我尝试了这一点,并且循环比仅对子集进行单独查询要慢得多。
所以,现在我必须知道 - 限制范围查询的最佳方法是什么,然后对那些限制自身结果的结果进行未来查询,这些结果由原始 .limit(x) 返回?