加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

ruby-on-rails – 什么是获得第n个记录的最佳方式?

发布时间:2020-12-17 03:29:03 所属栏目:百科 来源:网络整理
导读:我在这里看到: How to get last N records with activerecord?,得到最后5条记录的最好方法是SomeModel.last(5). 获得第5个最后一个记录的最佳方式只有SomeModel.last(5).first还是其他的东西? 提前致谢! 解决方法 您正在寻找的是LIMIT,OFFSET的组合,并确
我在这里看到: How to get last N records with activerecord?,得到最后5条记录的最好方法是SomeModel.last(5).
获得第5个最后一个记录的最佳方式只有SomeModel.last(5).first还是其他的东西?

提前致谢!

解决方法

您正在寻找的是LIMIT,OFFSET的组合,并确保查询使用ORDER BY作为约束.这在PostgreSQL – Queries: Limit and Offset documentation page上有所描述.

一个例子是:

irb> SomeModel.count
=> 35

irb> SomeModel.order(:id).reverse_order.limit(1).offset(4)
# SomeModel Load (0.7ms)  SELECT "some_models".* FROM "some_models" ORDER BY "some_models".id DESC LIMIT 1 OFFSET 4
=> #<ActiveRecord::Relation [#<SomeModel id: 31,name: "hello world",created_at: "2014-03-24 21:52:46",updated_at: "2014-03-24 21:52:46">]>

这产生相同的结果(尽管作为AR :: Relation):

irb> SomeModels.last(5).first
# SELECT "some_models".* FROM "some_models" ORDER BY "some_models"."id" DESC LIMIT 5
=> #<SomeModel id: 31,updated_at: "2014-03-24 21:52:46">

不同之处在于,在前一个查询中,PostgreSQL会在内存中处理.reverse_order.limit.offset查询,并在返回结果之前适当地限制它们.在后者中,PostgreSQL将返回5个结果,并使用#first限制Ruby中的值.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读