2011-08-10 7 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番目の要素は、インデックス-2有する:

Model.all[-2] 

10持続た:

レール5 [-2][-3]ための最後から二番目の形態において
Model.all[-10] 

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 
関連する問題