Rails: "Next post" and "Previous post" links in my show view, how to?

I'm new in Rails... smile

In my blog aplication I want to have a "Previous post" link and a "Next post" link in the bottom of my show view.

How do I do this?

Thanks!


Solution 1:

If each title is unique and you need alphabetical, try this in your Post model.

def previous_post
  self.class.first(:conditions => ["title < ?", title], :order => "title desc")
end

def next_post
  self.class.first(:conditions => ["title > ?", title], :order => "title asc")
end

You can then link to those in the view.

<%= link_to("Previous Post", @post.previous_post) if @post.previous_post %>
<%= link_to("Next Post", @post.next_post) if @post.next_post %>

Untested, but it should get you close. You can change title to any unique attribute (created_at, id, etc.) if you need a different sort order.

Solution 2:

I used the model methods as below to avoid the issue where id + 1 doesn't exist but id + 2 does.

def previous
  Post.where(["id < ?", id]).last
end

def next
  Post.where(["id > ?", id]).first
end

In my view code, I just do this:

<% if @post.previous %>
  <%= link_to "< Previous", @post.previous %>

<% if @post.next %>
  <%= link_to "Next >", @post.next %>