我如何创建`second_to_last`方法?

时间:2013-01-12 22:28:07

标签: ruby-on-rails ruby rails-activerecord

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

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

我必须找到一种方法将Limit 1更改为Limit 2,然后选择第一个元素。我在想什么?有更好的方法吗?

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)。我不会那么简单。