Чтобы реализовать что-то вроде Model.previous, сам класс должен иметь текущее состояние. Это имело бы смысл, если бы «текущей» записью (возможно, в системе планирования публикаций?) В вашем примере была Record3, но в вашем примере это не предлагается.
Если вы хотите взять экземпляр модели и получить следующую или предыдущую запись, приведите простой пример:
class Page < ActiveRecord::Base
def previous(offset = 0)
self.class.first(:conditions => ['id < ?', self.id], :limit => 1, :offset => offset, :order => "id DESC")
end
def next(offset = 0)
self.class.first(:conditions => ['id > ?', self.id], :limit => 1, :offset => offset, :order => "id ASC")
end
end
Если это так, вы можете сделать что-то вроде:
* +1007 *
Также будет работать:
@page.previous(1)
@page.next
@page.next(1)
Очевидно, это предполагает, что идея 'next' и 'previous' основана на поле 'id', которое, вероятно, не будет распространяться в течение жизни приложения.
Если вы хотите использовать это в классе, возможно, вы могли бы расширить это в именованную область, которая принимает «текущую» запись в качестве аргумента. Примерно так:
named_scope :previous, lambda { |current, offset| { :conditions => ['id < ?', current], :limit => 1, :offset => offset, :order => "id DESC" }}
Что означает, что вы можете позвонить:
Page.previous(4,1)
Где '4' - это идентификатор записи, с которой вы хотите начать, а 1 - это номер, по которому вы хотите вернуться назад.