我有一个简单的rails查询,如
a = A.where(type: 'user')
if a.count > 1
#Log Information
end
return a
除非执行结果集上的某些操作,否则Rails会在不查询数据库的情况下进行延迟加载。这是一个很好的行为。但在我的情况下,rails最终会执行2个查询,因为我在a.count
上操作之前调用了a
SELECT COUNT(*) FROM `a` WHERE `a`.`type` = 'user';
SELECT `a`.* FROM `a` WHERE `a`.`type` = 'user';
我有没有办法让rails立即执行查询,以便只执行第二个查询并从数据集返回计数。
答案 0 :(得分:4)
您可以将结果强制为数组。我认为to_a
对此有用,但是entries
是表达意图的更清晰的方式,因为它的工作是迭代Enumerable
中的项并返回枚举结果的数组
a = A.where(type: 'user').entries
if a.count > 1
#Log Information
end
return a