Everyday Rails

Understanding REST and routes

By Aaron Sumner, July 18, 2010.

In conversations I have with folks who are working to improve their Rails chops, as well as in comments I’ve received in the short time I’ve been writing this blog, it seems that RESTful routing still causes some grief. With that in mind, I thought I’d provide a list of resources that may help anybody still scratching their heads over the contents of routes.rb, the output of rake routes, or view code that looks like form_for([@item.parent,@item]).

RESTful Rails tutorial

As someone who never studied computer science or seriously use a framework prior to Rails, I’ll admit that when REST and its effects on routing hit the scene with version 1.2 (and took center stage in version 2.0) I was confused. I fumbled around for a little while before finding the English translation of the RESTful Rails Tutorial by Ralf Wirdemann and Thomas Baustert. After reading through this 38-page PDF, I got it. If you’re looking for a primer on the concept of REST and the cool things it lets you do with routing, it’s a good start.

Disclaimer: This tutorial is really old. I debated including it in this list, but for an explanation of REST, nested routes, and member routes, the narrative still works pretty well. Just note that some of the code doesn’t apply in Rails 2.3 or Rails 3 (technically, most of it will work with Rails 2.3, but some things have been refined), but I think overall it’s still a good introduction to the concept.

You can download the RESTful Rails tutorial PDF in English, German, and Spanish.

Rails Routing from the Outside In

Next, read the more or less official guide to Rails Routing, Rails Routing from the Outside In. There are two versions that cover routing in Rails 2.3 and routing in Rails 3. You might want to read them both, even if you’re focusing on Rails 3 at this point—the 2.3 version provides some background knowledge that I think might be assumed for the Rails 3 version.

Nested Resources Railscast

At this point you should have a decent handle on how routing in Rails works. This Railscasts episode on nested routes demonstrates a very important facet of routing. Nested routes let you do things like convert a URL from something like /business/653?employee_id=4349 to something much cleaner like /business/653/employee/4349, while simplifying your views and controllers in the process. This episode also covers another useful feature called shallow routes, which would add /employee/4349 to the mix for actions that don’t require a business_id to them (e.g., :show, :edit, :destroy).

Routing in Rails 3 Railscast

To wrap things up, let’s look at a more recent episode of Railscasts that focuses on the changes to routing in Rails 3 (also available in ASCIIcast format). Things are different, both above and below the surface, but not so much that you’ll get confused if you need to work day-to-day with Rails 2.3.x and tinker with Rails 3 at night.

What do you think? Follow along on on Twitter or Facebook to let me know what you think and catch my latest posts. Better yet, subscribe to my newsletter for updates from Everyday Rails, book picks, and other thoughts and ideas that didn't quite fit here.

Black lives matter.

I stand with the Black community against systemic racism, police violence and brutality, intolerance, and hate in the United States and worldwide. We must all demand better from our leaders, and ourselves. Stop tolerating intolerance.

While you're here, please consider making a donation to Black Girls CODE, who do great, important work to provide opportunity to underprivileged girls interested in tech, or any organization working toward equity and safety for all, not just the privileged. Thank you.

Test with confidence!

If you liked my series on practical advice for adding reliable tests to your Rails apps, check out the expanded ebook version. Lots of additional, exclusive content and a complete sample Rails application.


Ruby on Rails news and tips, and other ideas and surprises from Aaron at Everyday Rails. Delivered to your inbox on no particular set schedule.