Rails:如何在最后之前找到记录?

我可以在下面的例子中找到我表格中的最后一条记录,但是如果我想在最后一次找到记录,例如(last-1)或(last-2)怎么办? 我在每个循环中都有这个例子:

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

 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 

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

您可以使用负指数。

倒数第二个元素的索引为-2:

 Model.all[-2] 

第10到最后:

 Model.all[-10] 

Rails 5中, [-2][-3]的倒数第二个forms具有别名 。 所以,如果你想,请使用:

 Model.second_to_last Model.third_to_last 

即使被接受的答案有效:

 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 

‘first’方法是一个数组方法,所以关于性能,最好使用’limit’方法,这是一个ActiveRecord方法并将LIMIT子句附加到SQL查询:

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