Вы можете добавить метод к Article
, чтобы получить следующую и предыдущую статьи, в зависимости от того, что вы подразумеваете под следующей и предыдущей - то есть, в каком порядке вы хотите, чтобы статьи были.
например. created_at
используется для определения порядка
def next
self.class.find(
:first,
:conditions => ["created_at > ?", self.created_at],
:order => 'created_at, id')
end
def previous
self.class.find(
:first,
:conditions => ["created_at < ?, self.created_at],
:order => 'created_at desc, id desc')
Это предполагает, что ничто не было создано на тот же день, что может быть слишком упрощенным, поэтому вы можете захотеть проверить и идентификатор тоже. Что-то вроде:
:conditions => ["created_at > ? or (created_at = ? and id > ?)", self.created_at, self.created_at, self.id]
Если вы просто хотите заказать по идентификатору, то это еще более тривиально, так как идентификаторы никогда не могут быть одинаковыми:
def next
self.class.find(:first,
:conditions => ['id > ?', self.id],
:order => 'id')
end
def previous
self.class.find(:first,
:conditions => ['id < ?', self.id],
:order => 'id desc')
end