Routing & RESTful Resources
Routing is how Ruby on Rails connects an incoming URL to the controller action that handles it — and Rails embraces REST, a convention that maps standard HTTP verbs to standard CRUD operations.
Learn Routing & RESTful Resources in our free Ruby course — a beginner-friendly interactive lesson with worked examples, a practice exercise and a quick…
Part of the free Ruby course at LearnCodingFast — hands-on lessons with examples you run in your browser, plus practice exercises and a quick quiz.
By the end of this lesson you'll write routes in config/routes.rb, use resources to generate RESTful routes, read the routes table, and use route helpers.
What You'll Learn in This Lesson
1️⃣ Declaring Routes and resources
Routes live in config/routes.rb . You can write single routes by hand, but the resources :posts macro generates all seven RESTful routes at once.
Run rails routes to see exactly what resources :posts created.
2️⃣ Route Helpers
Every resource also gives you named helpers that build URLs for you. Prefer them over hardcoding paths, so your links keep working if the URLs ever change.
Your turn. Add the one line that gives comments all seven RESTful routes.
Mini-Challenge: Read the Routes
Given resources :books , name the verb and path for several operations, then verify with rails routes .
Common Errors (and the fix)
- Singular resource name — Use plural: resources :posts , not resources :post .
- "No route matches" — The verb or path doesn't exist; check rails routes for the correct one.
- Hardcoding URLs — Prefer helpers like posts_path over typing "/posts" .
- Missing controller/action — A route can exist with no matching action, causing an error; create the action.
- Forgetting root — Without root , visiting / shows the default page, not yours.
Pro Tips
- 💡 Prefer resources: it keeps your routes RESTful and concise.
- 💡 Run rails routes often: it's the fastest way to see what's wired up.
- 💡 Use helpers everywhere: post_path(@post) beats string URLs.
📋 Quick Reference — Routing
Concept
Syntax
All RESTful routes
resources :posts
Single route
get "/about", to: "pages#about"
Home page
root "pages#home"
Index helper
posts_path
Show helper
post_path(@post)
List routes
rails routes
Frequently Asked Questions
🎉 Lesson Complete!
- ✅ Routes live in config/routes.rb
- ✅ resources :posts creates seven RESTful routes
- ✅ The HTTP verb and path together choose the action
- ✅ Route helpers like post_path build URLs
- ✅ rails routes lists everything
- ✅ Next lesson: Controllers & Actions
Practice quiz
Which file holds your application's routes?
- app/routes.rb
- config/routes.rb
- config/urls.rb
- db/routes.rb
Answer: config/routes.rb. All routing rules are declared in config/routes.rb.
What does resources :posts generate?
- Only a single show route
- The seven standard RESTful routes for posts
- Just a database table
- A new posts controller file only
Answer: The seven standard RESTful routes for posts. resources :posts creates the seven conventional CRUD routes (index, show, new, create, edit, update, destroy).
Which HTTP verb does the RESTful route to CREATE a new post use?
- POST
- GET
- PUT
- DELETE
Answer: POST. Creating a record uses POST /posts, mapped to the create action.
Which command prints a table of all the app's routes?
- rails server
- rails console
- rails routes
- rails new
Answer: rails routes. rails routes lists every route with its verb, path, and controller#action.
The route GET /posts/:id maps to which controller action?
- index
- new
- create
- show
Answer: show. GET /posts/:id is the show action, displaying one specific post.
What does the route helper posts_path return?
- The /posts URL path as a string
- A database query
- The Post model class
- An array of post objects
Answer: The /posts URL path as a string. posts_path returns the path string "/posts", letting you avoid hardcoding URLs.
Which DELETE route removes a post, and to which action?
- DELETE /posts -> index
- DELETE /posts/:id -> destroy
- GET /posts/:id/delete -> remove
- POST /posts/:id -> destroy
Answer: DELETE /posts/:id -> destroy. DELETE /posts/:id is mapped to the destroy action.
How do you declare the home page route in routes.rb?
- home "pages#index"
- get "/"
- root "pages#home"
- index "pages#home"
Answer: root "pages#home". root "pages#home" sets the application's root (/) to that controller action.
Which RESTful route shows the form for editing an existing post?
- GET /posts/new -> new
- GET /posts/:id/edit -> edit
- PATCH /posts/:id -> update
- GET /posts -> index
Answer: GET /posts/:id/edit -> edit. GET /posts/:id/edit maps to the edit action, which renders the edit form.
The named helper post_path(@post) is most useful because it:
- Runs the database migration
- Creates a new controller
- Builds the correct URL for that specific post without hardcoding it
- Defines a new route
Answer: Builds the correct URL for that specific post without hardcoding it. post_path(@post) generates that post's URL (e.g. /posts/5), so links and redirects stay correct.
Continue this course
- Previous: Rails Project Structure & MVC
- Next: Controllers & Actions