我有一个城市模型,其中包含城市名称及其各自的人口。我如何编写一种方法来按一系列排名显示城市?
例如,我希望能够将两个数字传递给排名高端的方法,一个用于低端。也就是说,我可以通过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
但我不确定如何写这个逻辑。
答案 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