Rails - 如何按排名获取记录

时间:2013-05-21 04:16:02

标签: ruby-on-rails ruby

我有一个城市模型,其中包含城市名称及其各自的人口。我如何编写一种方法来按一系列排名显示城市?

例如,我希望能够将两个数字传递给排名高端的方法,一个用于低端。也就是说,我可以通过get_cities_by_pop(1,10)获得人口排名前10位的城市,而get_cities_by_pop(20,35)可以按人口排名按城市排名20-35。

到目前为止我只有:

def get_cities_by_pop(high, low)
  cities = City.all.order('population DESC')
end

但我不确定如何写这个逻辑。

2 个答案:

答案 0 :(得分:3)

您拥有ActiveRecord querying guide page所需的一切。

  

您可以使用limit指定要检索的记录数,   并使用offset指定之前要跳过的记录数   开始返回记录。例如

Client.limit(5)
     

最多会返回5个客户端,因为它没有指定偏移量   它将返回表格中的前5个。它执行的SQL看起来   像这样:

SELECT * FROM clients LIMIT 5
     

向该

添加偏移量
Client.limit(5).offset(30)
     

将从31日开始返回最多5个客户端。   SQL看起来像:

SELECT * FROM clients LIMIT 5 OFFSET 30

在这种情况下,最终结果如下:

Client.order('population DESC').offset(high-1).limit(low)

答案 1 :(得分:0)

你也可以考虑这个

def get_cities_by_pop(high, low)
  City.where(population >= ? AND population <= ?, low, high).order('population DESC')
end