Así es como lo hice. En primer lugar, añadir un par de named scopes a su modelo 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 el uso de la opción :select
para limitar los campos porque es probable que no desea recuperar un totalmente lleno con Post
ejemplo, sólo para mostrar los enlaces .
Luego, en mi posts_helper
que tienen este método:
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
Estoy seguro de que esto podría ser readaptado a ser menos detallado, pero la intención es clara. Obviamente, sus requisitos de marcado serán diferentes a los míos, por lo que no puede optar por utilizar una lista desordenada, por ejemplo.
Lo importante es el uso de las declaraciones if
porque si estás en la primera publicación, entonces no habrá ninguna publicación anterior y, a la inversa, si estás en la última publicación no serán entradas siguientes.
Por último, simplemente llame al método de ayuda desde su punto de vista:
<%= sidebar_navigation_links %>
Gracias !!!! ¡es perfecto! :) – pollinoco
@Sam, sí, por eso dije "si cada título es único". – ryanb
lo siento, Ryan, debo ir a ciegas, tu podrías: conditions => ["title>? And id>?", Title, id] para eludir. agregar un índice en el título es algo crítico aquí a menos que sea una aplicación de juguete. –