次のクエリを指定します。
Cars.where(color: red).limit(5)
制限に達したかどうかを確認する方法はありますか。赤い車が 6 台あるとします。赤い車の総数をカウントするには、別のクエリを実行する必要がありますか?
基本的に、許可された結果の最大数に達したために検索が制限されたことをユーザーに知らせるメッセージをユーザーに送信しようとしています。
次のクエリを指定します。
Cars.where(color: red).limit(5)
制限に達したかどうかを確認する方法はありますか。赤い車が 6 台あるとします。赤い車の総数をカウントするには、別のクエリを実行する必要がありますか?
基本的に、許可された結果の最大数に達したために検索が制限されたことをユーザーに知らせるメッセージをユーザーに送信しようとしています。
それを 1 つのクエリに結合する唯一の方法は、limit(6) を実行することです。サイズが 6 の場合、最後の要素を削除し、それらがより多くの結果であることを記録します。
または、別のクエリ Cars.where(color: red).count を実行します。これは別の SQL クエリを実行しますが、count クエリはデータベースに対して非常に高速な場合があります。
あなたの質問に対する直接的な答えは、この情報を 1 回のクエリで取得することはできないということです。2 つのクエリを実行する必要があります。1 つは限定されたセットを返すためのもので、もう 1 つは合計数を見つけるためのものです。
これが必要ないのは、結果の最初のページ (オフセットが 0) を照会していて、返される結果の数が制限値よりも少ない場合 (たとえば、制限を 5 に設定しても 4 つの結果が得られる場合) だけです。戻る)。
サンプル コードは次のようになります。
limit = 5
cars_scoped = Cars.where(color: red)
cars = cars_scoped.limit(limit)
cars_count = cars.length < limit ? cars.length : cars_scoped.count