Bird
Raised Fist0
Ruby on Railsframework~20 mins

Route parameters in Ruby on Rails - Practice Problems & Coding Challenges

Choose your learning style10 modes available
Challenge - 5 Problems
🎖️
Route Parameters Master
Get all challenges correct to earn this badge!
Test your skills under time pressure!
❓ component_behavior
intermediate
2:00remaining
What is the output of this Rails route helper?
Given the route get '/books/:id', to: 'books#show' and the controller action def show; render plain: params[:id]; end, what will be the output when visiting /books/42?
AThe page will display the text '42'.
BThe page will display the text ':id'.
CThe page will show a routing error.
DThe page will display the text 'books#show'.
Attempts:
2 left
💡 Hint
Think about how route parameters are passed to the controller.
📝 Syntax
intermediate
2:00remaining
Which route definition correctly captures a username parameter?
You want to define a route that matches URLs like /profile/johndoe and passes 'johndoe' as a parameter named username. Which route definition is correct?
Aget '/profile/*username', to: 'users#show'
Bget '/profile/username', to: 'users#show'
Cget '/profile/:username', to: 'users#show'
Dget '/profile/:id', to: 'users#show'
Attempts:
2 left
💡 Hint
Route parameters use a colon before the name.
🔧 Debug
advanced
2:00remaining
Why does this route not capture the parameter?
Given the route get '/items/:item_id/edit', to: 'items#edit', why does visiting /items/edit cause a routing error?
ABecause the controller action 'edit' is missing.
BBecause the route should be defined as 'get '/items/edit/:item_id''.
CBecause the route should use a query parameter instead of a route parameter.
DBecause the route expects a segment between '/items/' and '/edit' to capture as :item_id, but '/items/edit' has none.
Attempts:
2 left
💡 Hint
Look at the URL structure and the route pattern carefully.
❓ state_output
advanced
2:00remaining
What is the value of params in this nested route?
Given the nested route resources :authors do resources :books end and visiting /authors/5/books/10, what will be the values of params[:author_id] and params[:id] in the BooksController?
Aparams[:author_id] is '5' and params[:id] is '10'.
Bparams[:author_id] is '10' and params[:id] is '5'.
Cparams[:author_id] and params[:id] are both '5'.
Dparams[:author_id] and params[:id] are both '10'.
Attempts:
2 left
💡 Hint
Nested resources pass the parent resource id with _id suffix.
🧠 Conceptual
expert
2:00remaining
What error occurs if a required route parameter is missing?
If a Rails route is defined as get '/orders/:order_id/items/:id', to: 'items#show' and a request is made to /orders/15/items (missing the :id), what error will Rails raise?
AActionController::UrlGenerationError
BRoutingError
CNoMethodError
DActiveRecord::RecordNotFound
Attempts:
2 left
💡 Hint
Think about how Rails matches URLs to routes.

Practice

(1/5)
1. What does a route parameter in Rails do?
get '/users/:id', to: 'users#show'
easy
A. Captures part of the URL as a variable to use in the controller
B. Defines a fixed URL path without variables
C. Specifies the HTTP method to use
D. Sets the controller action to redirect to another page

Solution

  1. Step 1: Understand the colon in the route path

    The colon before id means this part of the URL is a variable, called a route parameter.
  2. Step 2: Role of route parameters in Rails

    This variable is captured from the URL and passed to the controller action for use, like finding a user by ID.
  3. Final Answer:

    Captures part of the URL as a variable to use in the controller -> Option A
  4. Quick Check:

    Route parameter = URL variable [OK]
Hint: Colon before name means URL part is a variable [OK]
Common Mistakes:
  • Thinking route parameters define fixed paths
  • Confusing route parameters with HTTP methods
  • Assuming route parameters redirect to other pages
2. Which of the following is the correct syntax to define a route with a parameter named post_id in Rails?
easy
A. get '/posts/post_id', to: 'posts#show'
B. get '/posts/{post_id}', to: 'posts#show'
C. get '/posts/<post_id>', to: 'posts#show'
D. get '/posts/:post_id', to: 'posts#show'

Solution

  1. Step 1: Identify correct route parameter syntax

    In Rails, route parameters use a colon before the name, like :post_id.
  2. Step 2: Compare options

    Only get '/posts/:post_id', to: 'posts#show' uses the colon syntax correctly. Others use incorrect braces or no colon.
  3. Final Answer:

    get '/posts/:post_id', to: 'posts#show' -> Option D
  4. Quick Check:

    Colon before parameter name = correct syntax [OK]
Hint: Use colon before parameter name in route path [OK]
Common Mistakes:
  • Using curly braces or angle brackets instead of colon
  • Omitting colon before parameter name
  • Confusing parameter syntax with query strings
3. Given this route:
get '/products/:id', to: 'products#show'
And this controller code:
def show
  @product_id = params[:id]
end

What will @product_id be if the URL is /products/42?
medium
A. The string '42'
B. The integer 42
C. nil
D. An error because params[:id] is undefined

Solution

  1. Step 1: Understand route parameter capture

    The :id in the route captures the URL part '42' as a string in params[:id].
  2. Step 2: Assigning params value in controller

    The controller assigns @product_id = params[:id], so @product_id is the string '42'. Rails does not convert it automatically to integer.
  3. Final Answer:

    The string '42' -> Option A
  4. Quick Check:

    Route params are strings by default [OK]
Hint: Route params are strings unless converted [OK]
Common Mistakes:
  • Assuming params[:id] is an integer automatically
  • Expecting nil if parameter is present
  • Thinking params[:id] causes an error if defined in route
4. Identify the error in this route definition:
get '/orders/:order_id/items/:item_id', to: 'orders#item'

Controller action:
def item
  @order = Order.find(params[:id])
  @item = Item.find(params[:item_id])
end
medium
A. Route path should not have two parameters
B. params[:id] is incorrect; should be params[:order_id]
C. Controller action name should be 'show' not 'item'
D. Item.find should use params[:id] instead of params[:item_id]

Solution

  1. Step 1: Check route parameters names

    The route defines parameters :order_id and :item_id, so params keys are :order_id and :item_id.
  2. Step 2: Check controller parameter usage

    The controller incorrectly uses params[:id] which does not exist. It should use params[:order_id] to find the order.
  3. Final Answer:

    params[:id] is incorrect; should be params[:order_id] -> Option B
  4. Quick Check:

    Parameter names must match route keys [OK]
Hint: Match params keys exactly to route parameter names [OK]
Common Mistakes:
  • Using generic :id when route uses :order_id
  • Thinking multiple parameters are not allowed
  • Confusing controller action names with route parameters
5. You want to create a nested route to show a comment belonging to a post using route parameters. Which route definition correctly captures both post_id and id for the comment?
hard
A. get '/posts/:id/comments/:post_id', to: 'comments#show'
B. get '/posts/comments/:post_id/:id', to: 'comments#show'
C. get '/posts/:post_id/comments/:id', to: 'comments#show'
D. get '/comments/:id/posts/:post_id', to: 'comments#show'

Solution

  1. Step 1: Understand nested resource URL structure

    Nested routes usually put the parent resource first, then the child. Here, post_id comes before id for comment.
  2. Step 2: Check route parameter order and names

    get '/posts/:post_id/comments/:id', to: 'comments#show' correctly uses /posts/:post_id/comments/:id capturing post's ID and comment's ID in order.
  3. Final Answer:

    get '/posts/:post_id/comments/:id', to: 'comments#show' -> Option C
  4. Quick Check:

    Parent ID first, child ID second in nested routes [OK]
Hint: Parent resource param before child in nested routes [OK]
Common Mistakes:
  • Swapping order of post_id and comment id
  • Putting parameters in wrong positions
  • Using incorrect parameter names
Recommended

Ready to prove it?

Pass the test and this pattern moves unknown strong while earning +1 Grip toward your certificate.

10 questions~5 mineasy hard