0

我有一个包含城市名称及其各自人口的城市模型。我将如何编写一种按等级范围显示城市的方法?

例如,我希望能够将两个数字传递给排名高端的方法,一个用于低端的方法。即,我可以传入 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

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

4

2 回答 2

3

您在ActiveRecord 查询指南页面上拥有所需的一切。

您可以使用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)
于 2013-05-21T04:18:38.590 回答
0

你也可以考虑这个

def get_cities_by_pop(high, low)
  City.where(population >= ? AND population <= ?, low, high).order('population DESC')
end
于 2013-05-21T07:03:03.923 回答