2016-02-21 87 views
1

我有一個簡單的Rails查詢像Rails的查詢執行2個查詢

a = A.where(type: 'user') 
if a.count > 1 
    #Log Information 
end 
return a 

Rails會延遲加載,除非在那裏執行對結果集的一些操作不查詢數據庫。這是一個很好的行爲。但在我的情況下軌結束了執行2個查詢,因爲我對a

SELECT COUNT(*) FROM `a` WHERE `a`.`type` = 'user'; 
SELECT `a`.* FROM `a` WHERE `a`.`type` = 'user'; 

操作之前調用a.count有沒有什麼辦法可以讓軌道立即執行查詢,以便只執行第二個查詢和計數從數據集返回。

回答

4

您可以強制結果到數組中。我認爲to_a會爲此工作,但entries是一個更清晰的方式表達此意圖,因爲它的工作是迭代Enumerable中的項目並返回枚舉結果的數組。

a = A.where(type: 'user').entries 
if a.count > 1 
    #Log Information 
end 
return a 
+0

寫一個字或兩個什麼是條目。從未聽過。 +1 – Nithin

+1

我試圖快速發佈答案,然後填寫。 :) –