Ecco come l'ho fatto. In primo luogo, aggiungere un paio di named scopes al modello Post
:
def previous
Post.find_by_id(id - 1, :select => 'title, slug etc...')
end
def next
Post.find_by_id(id + 1, :select => 'title, slug etc...')
end
Nota l'uso dell'opzione :select
per limitare i campi, perché probabilmente non si vuole recuperare un completamente popolata Post
esempio solo per mostrare i link .
Poi nel mio posts_helper
ho questo metodo:
def sidebar_navigation_links
next_post = @post.next
previous_post = @post.previous
links = ''
if previous_post
links << content_tag(:h3, 'Previous')
links << content_tag(:ul, content_tag(:li,
content_tag(:a, previous_post.title,
:href => previous_post.permalink)))
end
if next_post
links << content_tag(:h3, 'Next', :class => 'next') if previous_post
links << content_tag(:h3, 'Next') if previous_post.nil?
links << content_tag(:ul, content_tag(:li,
content_tag(:a, next_post.title,
:href => next_post.permalink)))
end
content_tag(:div, links)
end
Sono sicuro che questo potrebbe essere riscritta per essere meno prolissa, ma l'intento è chiaro. Ovviamente i tuoi requisiti di markup saranno diversi dai miei, quindi potresti non scegliere di usare un elenco non ordinato, ad esempio.
L'importante è l'uso delle istruzioni if
perché se si è sul primo post, non saranno post precedenti e viceversa, se si è nell'ultimo post, non saranno post successivi.
Infine, è sufficiente chiamare il metodo di supporto alla vostra vista:
<%= sidebar_navigation_links %>
Grazie !!!! è perfetta! :) – pollinoco
@ Sam, sì, è per questo che ho detto "se ogni titolo è unico". – ryanb
scusa Ryan, devo diventare cieco, potresti: condizioni => ["titolo>? E id>?", Titolo, id] per aggirare. aggiungere un indice sul titolo è un po 'critico qui a meno che non sia un'app giocattolo. –