W prostej aplikacji blogowej, w której ktoś może przeczytać artykuł i zdecydować się na przeczytanie następnego artykułu bez ponownego przechodzenia przez listę artykułów, ale kliknąć przycisk Dalej i przenieść osobę do następnego artykułu na tej liście. Jak to zrobić. Pracowałem z willpaginate i kaminari i oba są świetnymi wtyczkami do paginacji.

Więc teraz w akcji pokazu chcę mieć następny i poprzedni link, który łączy następny i poprzedni artykuł, jak to zrobić

Prosty przykładowy kod poniżej do pracy

def show
  @article = Article.find(params[:id])
end
0
Uchenna 22 luty 2012, 02:56

2 odpowiedzi

Najlepsza odpowiedź

Możesz dodać metodę do Article, aby uzyskać następny i poprzedni artykuł w zależności od tego, co rozumiesz przez następny i poprzedni – tj. w jakiej kolejności chcesz artykuły.

Np. z created_at używanym do zdefiniowania kolejności

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')

Zakłada to, że nic nie ma tego samego utworzonego na dzień, co może być zbyt uproszczone, więc możesz również sprawdzić identyfikator. Coś jak:

    :conditions => ["created_at > ? or (created_at = ? and id > ?)", self.created_at, self.created_at, self.id]

Jeśli chcesz zamówić tylko według identyfikatora, jest to jeszcze bardziej trywialne, ponieważ identyfikatory nigdy nie mogą być takie same:

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
1
Shadwell 22 luty 2012, 03:40

Możesz skorzystać z wtyczki Willpaginate, która rozwiąże Twój problem. https://github.com/mislav/will_paginate

0
qarol 22 luty 2012, 03:04