Using Names in Rails Routes Instead of IDs
20 Jul 2006 in Programming, Ruby on Rails by GarrickI spent tonight cranking through some Ruby on Rails has_many :through association oddities and after pounding my head against the keyboard, I decided to shift gears and figure out Ruby On Rails Routes.
By default, the Rails expects ID to be passed in URL strings. But that’s really lame, and passing words is much cooler so, how do you do that?
Turns out, it’s so simple no one talks about it (vs. so hard no one’s figured it out).
Take the following example:
http://mydomain/friend/show/1
What’s ’show’? Who’s friend 1? Don’t they have a name?
Sure they do. Let’s say their name is ‘Wooster’
Here’s how to make turn the above url string into:
http://mydomain/friend/wooster
- Get the name of the database column storing your friends’ names (let’s say it’s ‘name’).
- In config/routes.rb add, somewhere above the default route:
map.connect 'friend/:name', :controller => 'friends', :action => 'show' - Now, in friends_controller, find
def showand change it to:
@friend = Friend.find_by_name(params[:name]) - Lastly, all the id-based urls pointing to our good friend Wooster need to be updated to reflect the name-based change. Like the one your Friends list.rhtml file.
'show', :name => friend.name
Comment | Trackback URL
Short Link:
Add a Comment
Related Entries
- REST-less with link_to
- Workaround for IE Overly Accepting in Rails’ respond_to format
- Locally Running Multiple Rails Apps on OS X
- How To: Build a Wiki with Ruby on Rails - Part 1
- Restarting Rails with ‘Address Already in Use’
