0

我想创建一个second_to_last类似于last但从模型返回倒数第二条记录而不是最后一条记录的方法。我认为这将是微不足道的,因为最后的 SQL 是:

Select * from "users".* FROM "Users" ORDERED BY "ORDERED BY" "users"."id" DECS LIMIT 1

我必须找到一种方法来更改Limit 1toLimit 2然后选择第一个元素。我的想法正确吗?有更好的方法吗?

4

2 回答 2

4

如果这确实是一个 Rails 问题,那么无论如何您都不需要在 SQL 中执行此操作。做就是了:

User.order("id DESC").offset(1).first

从字面上看,它执行这个 sql 查询:

SELECT `users`.* FROM `users` ORDER BY id DESC LIMIT 1 OFFSET 1
于 2013-01-12T22:33:39.637 回答
2

我认为你在正确的轨道上。尝试这样的事情:

User.order("created_at DESC").limit(2).last

这应该返回倒数第二个记录。

甚至有一些方法可以使用您的新方法扩展 Rails,但这可能超出了您的问题范围。

更好的是,您可以使用 User.last(2)。我没有比这更简单的了。

于 2013-01-12T22:41:03.050 回答