2016-02-21 86 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

我试图快速发布答案,然后填写。 :) –