2011-08-10 66 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