Obtener registros previos/siguientes con ActiveRecord

Según se vaya avanzando en un proyecto, es posible que nos veamos en la necesidad de encotrar los registros vecinos para el que estemos utilizando en un momento dado. De este modo, por ejemplo si uno esta posicionado en un registro y desea obtener el siguiente, tener algo como "next" o "previous" sería muy útil.

Acts_as_ordered es un plugin interesante para obtener los registros previos o siguientes a uno determinado.Es muy versatil y potente. Se puede descargar de aquí.

Para mi cuestiones particulares, lo resolví a lo bestia, incluyendo estos dos métodos en la clase que los requería.

  1. def self.previous id
  2. prev_id= self.minimum(:id, :conditions => ['id > ?', id])
  3. self.find(prev_id)
  4. end
  5.  
  6. def self.next id
  7. next_id=self.maximum(:id, :conditions => ['id < ?', id])
  8. self.find(next_id)
  9. end

Saludos

Inspirado de un reply en Duane's Brain