【问题标题】:Rails - how to get the records by their rankRails - 如何按等级获取记录
【发布时间】:2013-05-21 15:03:03
【问题描述】:

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

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

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

【问题讨论】:

    标签: ruby-on-rails ruby


    【解决方案1】:

    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)
    

    【讨论】:

    • 在这种情况下,最终结果将如下所示:Client.order('population DESC').offset(high-1).limit(low)
    • 谢谢!我知道它会像这样简单。
    【解决方案2】:

    你也可以考虑一下

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-07-17
      • 1970-01-01
      相关资源
      最近更新 更多