Fixing the routes for tags

After my first forray into tags, I felt like I needed to further refine and enhance my usage of them.

So we had this code chunk:

# in app/controllers/blog_controller.rb
def tags
  # FIXME do routing magic to change :id to :tag
  @blog_posts = BlogPost.find_tagged_with params[:id]
  render :action => 'all'
end
...

# in config/routes.rb
map.connect 'blog/tags/:tag', :controller => 'blog', :action => 'tags'

The issue was that I wanted to be using params[:tag], not params[:id]. The cause was that my map.connect was declared AFTER the default connect string, ie:

# Install the default route as the lowest priority.
map.connect ':controller/:action/:id.:format'
map.connect ':controller/:action/:id'

Apparently I didn't read the comments closely enough :) Moving it above the default route, it works like I had hoped.

blog comments powered by Disqus