2013-01-07 118 views
1

給出以下查詢:有沒有辦法判斷一個ActiveRecord查詢打了極限

Cars.where(color: red).limit(5) 

有沒有辦法告訴如果限制被擊中。假設有6輛紅色汽車,我是否需要單獨查詢來計算紅色汽車的總數?

基本上,我試圖發送一條消息給用戶,讓他們知道搜索由於達到了允許的最大結果數量而受到限制。

+0

如果要顯示過去5年,限制在技術上並不打,直到下一個頁面 - 在這一點,你就會知道,因爲你已經收到<5個結果背部。 – VNO

回答

3

把它合併成一個查詢的唯一方法是做一個限制(6)。如果大小爲6,則刪除最後一個元素並記錄它們是更多結果。

或者,單獨查詢Cars.where(color:red).count。雖然這將執行單獨的SQL查詢,但數據庫的查詢次數有時非常快。

+0

哇,這是一個不錯的技巧(你的第一個主張)!我會在後面記住這一點 – MrYoshiji

+0

是的,我喜歡第一個想法。 – kidbrax

0

您的問題的直接答案是,您無法在單個查詢中獲取此信息。您將不得不運行兩個查詢:一個返回有限集合,一個查找總計數。

唯一不需要的是當您查詢結果的第一頁(偏移量爲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 
+0

如果結果足夠少並且您已經知道,請避免再次查詢count。尼斯。 –

相關問題