我想创建一组查询,第一个查找在特定日期之后创建的所有记录,然后第二个显示在该日期之前创建的所有记录。由于有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
它将返回=&gt; 30175,我该如何制作,只返回10张?并且有30,000行,这很慢。
答案 0 :(得分:3)
在ActiveRecord::Relation对象上调用count
将触发计数查询。 SQL限制不能像您期望的那样使用计数查询,因为限制实际上将应用于结果计数本身 - 通常是单行(除非使用GROUP BY):
SELECT COUNT(*)
FROM scorecards
WHERE created_at < '2013-04-01' AND reviewed = false
LIMIT 10
当您调用to_a
(或all
或其他任何实际触发查询的内容时)时,您正在处理返回的集合 - count
现在将返回集合的长度。
有关此问题的讨论,请参阅here
。