How do you use anchors for IDs in routes in Rails 3?

ClosureCowboy picture ClosureCowboy · Feb 12, 2011 · Viewed 13.2k times · Source

Imagine a blog with posts and comments. An individual comment's URL might be posts/741/comments/1220.

However, I'd like to make the URL posts/741#1220, or even posts/741#comment-1230.

What's the least intrusive way of doing this, so that redirect_to comment_path(my_comment) points to the correct URL?

Answer

Holger Just picture Holger Just · Feb 13, 2011

You could simply use

redirect_to post_path(comment.post, :anchor => "comment-#{comment.id}")

to manually build the URL with the anchor. That way, you can still have the absolute URL to your comments as posts/:post_id/comments/:comment_id in your routes. You can also create a helper method in e.g. application_controller.rb

class ApplicationController
  helper :comment_link

  def comment_link(comment)
    post_path(comment.post, :anchor => "comment-#{comment.id}")
  end
end