📖 Scenario: You are building a simple blog application using Ruby on Rails. You need to define routes so that users can visit pages to see all posts, view a single post, create a new post, and edit existing posts.
🎯 Goal: Define routes in the config/routes.rb file to connect URL paths to controller actions for posts.
📋 What You'll Learn
Create a root route that points to the posts#index action
Define a route for GET /posts to list all posts
Define a route for GET /posts/:id to show a single post
Define a route for GET /posts/new to show the new post form
Define a route for GET /posts/:id/edit to show the edit form
💡 Why This Matters
🌍 Real World
Defining routes is essential in Rails apps to connect URLs to the code that handles requests, like showing pages or submitting forms.
💼 Career
Rails developers must know how to configure routes to build web applications that respond correctly to user navigation and actions.
Progress0 / 4 steps
1
Set up the root route
In the config/routes.rb file, write a line to set the root route to the posts#index action.
Ruby on Rails
Hint
The root route uses the root method followed by the controller and action in quotes.
2
Add route for listing all posts
Add a route for GET /posts that maps to the posts#index action using the get method.
Ruby on Rails
Hint
Use get '/posts', to: 'posts#index' to define this route.
3
Add routes for showing, creating, and editing posts
Add routes for these paths and actions using get:
GET /posts/:id to posts#show
GET /posts/new to posts#new
GET /posts/:id/edit to posts#edit
Ruby on Rails
Hint
Use get with the path and to: option for each route.
4
Complete the routes file
Ensure the config/routes.rb file has all the routes inside the Rails.application.routes.draw do ... end block exactly as specified.
Ruby on Rails
Hint
Make sure all routes are inside the Rails.application.routes.draw do ... end block.
Practice
(1/5)
1. What is the purpose of defining routes in the routes.rb file in a Rails application?
easy
A. To manage user sessions
B. To write database queries
C. To style the web pages
D. To connect URLs to specific controller actions
Solution
Step 1: Understand the role of routes in Rails
Routes define how incoming web requests are matched to controller actions.
Step 2: Identify the correct purpose
Connecting URLs to controller actions allows the app to respond correctly to user requests.
Final Answer:
To connect URLs to specific controller actions -> Option D
Quick Check:
Routes link URLs to actions [OK]
Hint: Routes map URLs to controller actions [OK]
Common Mistakes:
Confusing routes with database queries
Thinking routes handle styling
Assuming routes manage sessions
2. Which of the following is the correct syntax to define a GET route for the URL /home that maps to the index action of the pages controller?
easy
A. route get '/home' => 'pages#index'
B. get 'pages#index', to: '/home'
C. get '/home', to: 'pages#index'
D. post '/home', to: 'pages#index'
Solution
Step 1: Recall the syntax for GET routes in Rails
The correct syntax is get 'url', to: 'controller#action'.
Step 2: Match the URL and controller#action correctly
get '/home', to: 'pages#index' correctly uses get '/home', to: 'pages#index'.
Final Answer:
get '/home', to: 'pages#index' -> Option C
Quick Check:
GET route syntax = get 'url', to: 'controller#action' [OK]
Hint: Use get 'url', to: 'controller#action' for GET routes [OK]
Common Mistakes:
Swapping URL and controller#action positions
Using post instead of get for GET routes
Incorrect syntax like 'route get'
3. Given the following route definition in routes.rb:
resources :articles, only: [:index, :show]
What URLs will be available and which controller actions will they map to?
medium
A. /articles (GET) -> articles#index and /articles/:id (GET) -> articles#show
B. /articles/new (GET) -> articles#new and /articles/:id/edit (GET) -> articles#edit
C. /articles (POST) -> articles#create and /articles/:id (PATCH) -> articles#update
D. /articles/:id (DELETE) -> articles#destroy and /articles (GET) -> articles#index
Solution
Step 1: Understand the resources with only option
It limits routes to only index and show actions.
Step 2: Identify URLs and actions for index and show
index maps to GET /articles, show maps to GET /articles/:id.
Final Answer:
/articles (GET) -> articles#index and /articles/:id (GET) -> articles#show -> Option A
Quick Check:
resources with only index, show = GET /articles and GET /articles/:id [OK]
Hint: Only index and show create GET /collection and GET /collection/:id [OK]
Common Mistakes:
Assuming all RESTful routes are created
Confusing HTTP verbs for actions
Mixing up new/edit with index/show
4. Identify the error in this route definition:
get '/profile', controller: 'users', action: 'show'
medium
A. URL should not start with a slash
B. Missing 'to:' keyword before controller#action
C. Should use 'post' instead of 'get'
D. Controller name should be capitalized
Solution
Step 1: Check correct syntax for get route with controller and action
The correct syntax uses to: 'controller#action', not separate keys.
Step 2: Identify the missing 'to:' keyword
The given code misses to: and incorrectly uses separate keys.
Final Answer:
Missing 'to:' keyword before controller#action -> Option B
Quick Check:
Use get '/url', to: 'controller#action' [OK]
Hint: Use 'to:' keyword for controller#action in routes [OK]
Common Mistakes:
Omitting 'to:' keyword
Using wrong HTTP verb
Incorrect URL format
5. You want to create routes for a blog with posts and nested comments. Which route definition correctly creates RESTful routes for posts and nested comments inside routes.rb?
hard
A. resources :posts do
resources :comments
end
B. resources :posts, comments: true
C. resource :posts do
resource :comments
end
D. get '/posts/:post_id/comments', to: 'comments#index' only
Solution
Step 1: Understand nested resources syntax
Nested resources are defined by placing one resources block inside another.
Step 2: Identify correct nested syntax for posts and comments
resources :posts do
resources :comments
end correctly nests comments inside posts using a block.
Final Answer:
resources :posts do
resources :comments
end -> Option A
Quick Check:
Nested resources use block syntax [OK]
Hint: Nest resources inside block for nested routes [OK]
Common Mistakes:
Using singular 'resource' instead of plural 'resources'
Trying to pass nested resources as options
Defining only one route manually
Recommended
Ready to prove it?
Pass the test and this pattern moves unknownstrongwhile earning +1 Grip toward your certificate.