我想创建一个second_to_last
类似于last
但从模型返回倒数第二条记录而不是最后一条记录的方法。我认为这将是微不足道的,因为最后的 SQL 是:
Select * from "users".* FROM "Users" ORDERED BY "ORDERED BY" "users"."id" DECS LIMIT 1
我必须找到一种方法来更改Limit 1
toLimit 2
然后选择第一个元素。我的想法正确吗?有更好的方法吗?
我想创建一个second_to_last
类似于last
但从模型返回倒数第二条记录而不是最后一条记录的方法。我认为这将是微不足道的,因为最后的 SQL 是:
Select * from "users".* FROM "Users" ORDERED BY "ORDERED BY" "users"."id" DECS LIMIT 1
我必须找到一种方法来更改Limit 1
toLimit 2
然后选择第一个元素。我的想法正确吗?有更好的方法吗?
如果这确实是一个 Rails 问题,那么无论如何您都不需要在 SQL 中执行此操作。做就是了:
User.order("id DESC").offset(1).first
从字面上看,它执行这个 sql 查询:
SELECT `users`.* FROM `users` ORDER BY id DESC LIMIT 1 OFFSET 1
我认为你在正确的轨道上。尝试这样的事情:
User.order("created_at DESC").limit(2).last
这应该返回倒数第二个记录。
甚至有一些方法可以使用您的新方法扩展 Rails,但这可能超出了您的问题范围。
更好的是,您可以使用 User.last(2)。我没有比这更简单的了。