範囲指定されたクエリを作成する 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)
total_games に必要なゲームが 100 ある場合、.limit(10) を追加すると、最後の 10 が取得されます。でも今は呼んでいる
total_games.where("team_score > opponent_score").count
最後の 10 を超えて、total_games の一部ではない結果に到達します。.limit(10) を追加してから、常に合計 10 のゲームが得られますが、10 勝 10 敗も得られます。
これをすべて入力した後、制限を使用したい場合は、結果の小さなセットを表示するためであることに気付きました。そのため、結果をループして、勝敗などを計算することになるでしょう (代わりに上記のサブセットのように個別のクエリを実行します)。
total_games に数百または数千の結果があったときにこれを試してみましたが、サブセットに対して個別のクエリを実行するよりも、ループスルーの方が大幅に遅くなりました。
だから、今私は知っておく必要があります - 範囲指定されたクエリを制限し、元の .limit(x) によって返される結果を制限するそれらの結果の将来のクエリを実行する最良の方法は何ですか?