Rails查询执行2个查询

时间:2016-02-21 08:56:05

标签: mysql ruby-on-rails lazy-loading

我有一个简单的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立即执行查询,以便只执行第二个查询并从数据集返回计数。

1 个答案:

答案 0 :(得分:4)

您可以将结果强制为数组。我认为to_a对此有用,但是entries是表达意图的更清晰的方式,因为它的工作是迭代Enumerable中的项并返回枚举结果的数组

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