0

我想创建一组查询,第一个查找在特定日期之后创建的所有记录,然后第二个显示在该日期之前创建的所有记录。由于有 30,000 条记录,我只想显示最接近我设置的日期的 10 条。

 private
def current_scorecards_for_review
  self.where("created_at > ? AND reviewed = ?", Date.new(2013,04,01), false)
end

def historic_scorecards_for_review
  self.where("created_at < ? AND reviewed = ?", Date.new(2013,04,01), false).limit(10)
end

这就是我到目前为止所写的,当我在控制台中尝试它时

e = Scorecard.where("created_at < ?", Date.new(2013,04,01)).limit(10)

然后打电话

e.count

它将返回 => 30175,我该如何制作才能只返回 10 个?并且有 30,000 行,这很慢。

4

1 回答 1

3

调用ActiveRecord::Relationcount对象将触发计数查询。SQL 限制不会像您对计数查询所期望的那样起作用,因为限制实际上将应用于结果计数本身 - 通常是单行(除非使用 GROUP BY):

SELECT COUNT(*) 
FROM scorecards 
WHERE created_at < '2013-04-01' AND reviewed = false 
LIMIT 10

当您调用to_a(或all其他任何实际触发查询的方法)时,您正在处理返回的集合 -count现在将返回集合的长度。

参见here有关此的讨论。

于 2013-04-17T14:02:21.190 回答