2013-01-07 74 views
1

给出以下查询:有没有办法判断一个ActiveRecord查询打了极限

Cars.where(color: red).limit(5) 

有没有办法告诉如果限制被击中。假设有6辆红色汽车,我是否需要单独查询来计算红色汽车的总数?

基本上,我试图发送一条消息给用户,让他们知道搜索由于达到了允许的最大结果数量而受到限制。

+0

如果要显示过去5年,限制在技术上并不打,直到下一个页面 - 在这一点,你就会知道,因为你已经收到<5个结果背部。 – VNO

回答

3

把它合并成一个查询的唯一方法是做一个限制(6)。如果大小为6,则删除最后一个元素并记录它们是更多结果。

或者,单独查询Cars.where(color:red).count。虽然这将执行单独的SQL查询,但数据库的查询次数有时非常快。

+0

哇,这是一个不错的技巧(你的第一个主张)!我会在后面记住这一点 – MrYoshiji

+0

是的,我喜欢第一个想法。 – kidbrax

0

您的问题的直接答案是,您无法在单个查询中获取此信息。您将不得不运行两个查询:一个返回有限集合,一个查找总计数。

唯一不需要的是当您查询结果的第一页(偏移量为0)并且返回结果的数量小于限定值时(例如,您将限制设置为5但返回4个结果)。

示例代码应该是这样的:

limit = 5 
    cars_scoped = Cars.where(color: red) 
    cars = cars_scoped.limit(limit) 
    cars_count = cars.length < limit ? cars.length : cars_scoped.count 
+0

如果结果足够少并且您已经知道,请避免再次查询count。尼斯。 –

相关问题