Rails将查询限制为多个结果

时间:2013-04-17 12:51:57

标签: mysql ruby-on-rails

我想创建一组查询,第一个查找在特定日期之后创建的所有记录,然后第二个显示在该日期之前创建的所有记录。由于有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行,这很慢。

1 个答案:

答案 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