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