2011-08-10 109 views
10

我可以在下面的示例中找到表格中的最后一条记录,但是如果我想在最后找到记录,例如(last-1)还是(last-2)..? 我在我的每一个循环的例子:Rails:如何在最后找到记录?

Table.find(:last, :conditions => {:dogovor_id => p.id}).id 

回答

19
Table.where(:dogovor_id => p.id).order("id DESC").first   # last 
Table.where(:dogovor_id => p.id).order("id DESC").offset(1).first # last - 1 
Table.where(:dogovor_id => p.id).order("id DESC").offset(2).first # last - 2 
+0

谢谢!有用! :) –

13

另一种更容易的方法是记住:Model.last(2).first

+0

我宁愿这比接受的 –

2

您可以使用负的索引。

第二到最后一个元素的索引为-2:

Model.all[-2] 

将第10到持续:

Model.all[-10] 

导轨5种[-2][-3]倒数第二形式have aliases。所以,如果你想,用这个:

Model.second_to_last 
Model.third_to_last 
0

即使接受的答案工作:

Table.where(:dogovor_id => p.id).order("id DESC").first   # last 
Table.where(:dogovor_id => p.id).order("id DESC").offset(1).first # last - 1 
Table.where(:dogovor_id => p.id).order("id DESC").offset(2).first # last - 2 

“第一”的方法是一个数组的方法,所以就表现其更好地使用“限制”的方法是一个ActiveRecord方法并将LIMIT子句附加到SQL查询:

Table.where(dogovor_id: p.id).order(id: :desc).offset(1).limit(1) # last - 1