Rails: how to find record before 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

Another easier to remember way is: Model.last(2).first


Rails 4:

Model.last(2).first

In Rails 5+ you can use new self-explanatory accessor methods:

Model.second_to_last
Model.third_to_last

You can also use negative indices.

Second to last:

Model.all[-2]

The 10th to last:

Model.all[-10]

NB: As pointed by @AndrewSchwartz, this method can be more problematic (consuming) on large tables. This method first loads all the records and then processes them, whereas second_to_last generates more optimized query with LIMIT and OFFSET