我在这里看到:How to get last N records with activerecord?,获取最后5条记录的最佳方法是SomeModel.last(5)。
是仅获得SomeModel.last(5).first的最后第五条记录的最佳方法,还是其他东西?

提前致谢!

最佳答案

您要查找的是LIMITOFFSET的组合,并确保查询使用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相同(尽管与AR::Relation相同):
irb> SomeModels.last(5).first
# SELECT "some_models".* FROM "some_models" ORDER BY "some_models"."id" DESC LIMIT 5
=> #<SomeModel id: 31, name: "hello world", created_at: "2014-03-24 21:52:46", updated_at: "2014-03-24 21:52:46">

区别在于,在前一个查询中,PostgreSQL将在内存中处理.reverse_order.limit.offset查询,并在返回结果之前适本地限制值。在后者中,PostgreSQL将返回5个结果,您可以使用#first限制Ruby中的值。

关于ruby-on-rails - 什么是使第n个记录保持最佳状态的最佳方法?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/22620929/

10-16 17:32