Bird
Raised Fist0
Ruby on Railsframework~20 mins

RESTful resource routes in Ruby on Rails - Practice Problems & Coding Challenges

Choose your learning style10 modes available
Challenge - 5 Problems
🎖️
RESTful Routes Master
Get all challenges correct to earn this badge!
Test your skills under time pressure!
❓ component_behavior
intermediate
2:00remaining
What is the URL and HTTP method for the 'edit' action in a RESTful resource route?
Given a resource named articles, what is the correct URL path and HTTP method to access the edit action for the article with ID 5?
APOST /articles/5/edit
BGET /articles/5/edit
CGET /articles/edit/5
DPATCH /articles/5/edit
Attempts:
2 left
💡 Hint
Remember, the edit action shows a form to change an existing resource and uses GET.
📝 Syntax
intermediate
2:00remaining
Which route declaration creates all RESTful routes for a resource named 'products'?
In Rails routing, which line correctly generates all seven standard RESTful routes for the products resource?
Amatch 'products', via: :all
Bresource :products
Cget 'products'
Dresources :products
Attempts:
2 left
💡 Hint
Plural form is important for multiple resources.
❓ state_output
advanced
2:00remaining
What controller action and params are triggered by this route?
Given the route resources :comments, what controller action and params hash will be called when a DELETE request is sent to /comments/42?
AAction: destroy, Params: { id: '42' }
BAction: delete, Params: { comment_id: '42' }
CAction: destroy, Params: { comment_id: '42' }
DAction: remove, Params: { id: '42' }
Attempts:
2 left
💡 Hint
The DELETE method on a resource with ID calls the destroy action with id param.
🔧 Debug
advanced
2:00remaining
Why does this custom route conflict with RESTful routes?
Consider these routes in routes.rb:
resources :users
get '/users/new', to: 'users#show'
What problem will this cause when accessing /users/new?
AThe custom route overrides the RESTful 'new' action, causing the wrong controller action to run.
BThe RESTful 'show' action will never be called for any user.
CIt causes a syntax error in the routes file.
DNo problem; both routes work fine together.
Attempts:
2 left
💡 Hint
Routes are matched top to bottom; custom routes can override RESTful ones.
🧠 Conceptual
expert
3:00remaining
How does Rails handle nested RESTful resource routes in URL and params?
Given these nested routes:
resources :authors do
  resources :books
end
What is the URL and params hash for accessing the 'show' action of book with ID 7 belonging to author with ID 3?
AURL: /authors/3/books/7, Params: { id: '3', book_id: '7' }
BURL: /books/7/authors/3, Params: { id: '7', author_id: '3' }
CURL: /authors/3/books/7, Params: { author_id: '3', id: '7' }
DURL: /books/7, Params: { author_id: '3', id: '7' }
Attempts:
2 left
💡 Hint
Nested resources include parent resource ID in URL and params with key named after parent resource.

Practice

(1/5)
1. What does the resources :books line do in a Rails routes file?
easy
A. Creates all standard RESTful routes for the books resource automatically.
B. Creates only the index and show routes for books.
C. Creates a single custom route named books.
D. Deletes all routes related to books.

Solution

  1. Step 1: Understand the resources method

    The resources method in Rails automatically generates all seven standard RESTful routes (index, show, new, create, edit, update, destroy) for a given resource.
  2. Step 2: Apply to resources :books

    Using resources :books creates all these routes for the books controller, enabling standard CRUD actions.
  3. Final Answer:

    Creates all standard RESTful routes for the books resource automatically. -> Option A
  4. Quick Check:

    resources :books = all RESTful routes [OK]
Hint: Remember: resources creates all standard routes by default [OK]
Common Mistakes:
  • Thinking it creates only some routes
  • Confusing resources with resource (singular)
  • Assuming it deletes routes
2. Which of the following is the correct syntax to create only the index and show routes for a resource named articles?
easy
A. resources :articles, only: [:index, :show]
B. resources :articles, except: [:index, :show]
C. resource :articles, only: [:index, :show]
D. resources :articles, only: index, show

Solution

  1. Step 1: Use resources with only option

    To limit routes to specific actions, use only: [:index, :show] with resources.
  2. Step 2: Check syntax correctness

    resources :articles, only: [:index, :show] correctly uses symbols in an array with only. resources :articles, except: [:index, :show] uses except which excludes actions, not includes. resource :articles, only: [:index, :show] uses singular resource which is for single objects, not collections. resources :articles, only: index, show syntax is invalid because only expects an array.
  3. Final Answer:

    resources :articles, only: [:index, :show] -> Option A
  4. Quick Check:

    Limit routes with only and array [OK]
Hint: Use only: with an array of symbols to limit routes [OK]
Common Mistakes:
  • Using except instead of only
  • Using singular resource for collections
  • Incorrect syntax without brackets
3. Given the route declaration resources :users, except: [:destroy], which HTTP verb and path will NOT be available?
medium
A. GET /users/:id/edit
B. DELETE /users/:id
C. POST /users
D. GET /users

Solution

  1. Step 1: Understand except: [:destroy]

    The except option removes the specified action routes. Here, destroy is excluded, so no route for deleting a user is created.
  2. Step 2: Identify the HTTP verb and path for destroy

    The destroy action corresponds to the HTTP DELETE verb on the path /users/:id. This route will be missing.
  3. Final Answer:

    DELETE /users/:id -> Option B
  4. Quick Check:

    except: [:destroy] removes DELETE route [OK]
Hint: Destroy action uses DELETE verb; except removes it [OK]
Common Mistakes:
  • Confusing except with only
  • Thinking GET routes are removed
  • Mixing HTTP verbs with wrong actions
4. Identify the error in this routes file snippet:
resources :products, only: :show, :edit
medium
A. The only option should list all seven RESTful actions.
B. The resources method cannot use only option.
C. The resource name products should be singular.
D. The only option should be an array of symbols, not separate symbols.

Solution

  1. Step 1: Check syntax of only option

    The only option expects an array of symbols like only: [:show, :edit]. Writing only: :show, :edit passes :show as the only option and :edit is outside the hash, causing syntax error.
  2. Step 2: Verify other options

    resources supports only. The resource name should be plural for collections. Listing all actions is optional.
  3. Final Answer:

    The only option should be an array of symbols, not separate symbols. -> Option D
  4. Quick Check:

    only needs array syntax [OK]
Hint: Use brackets for multiple actions in only: [:show, :edit] [OK]
Common Mistakes:
  • Omitting brackets for multiple actions
  • Using singular resource for collections
  • Thinking only must list all actions
5. You want to create RESTful routes for a resource orders but only allow index, show, and create actions. Additionally, you want a custom member route cancel that responds to POST requests. Which routes file code is correct?
hard
A. resources :orders, except: [:edit, :update, :destroy] do\n post 'cancel', on: :member\nend
B. resources :orders, only: [:index, :show, :create] do\n get 'cancel', on: :collection\nend
C. resources :orders, only: [:index, :show, :create] do\n post 'cancel', on: :member\nend
D. resource :orders, only: [:index, :show, :create] do\n post 'cancel', on: :member\nend

Solution

  1. Step 1: Limit routes to index, show, create

    Use only: [:index, :show, :create] to restrict routes to these actions.
  2. Step 2: Add custom member route for cancel

    Use a block with post 'cancel', on: :member to add a POST route for cancel on individual orders.
  3. Step 3: Check other options

    resources :orders, only: [:index, :show, :create] do\n get 'cancel', on: :collection\nend uses GET and collection which is incorrect for cancel on a single order. resources :orders, except: [:edit, :update, :destroy] do\n post 'cancel', on: :member\nend uses except which is less clear and includes extra routes. resource :orders, only: [:index, :show, :create] do\n post 'cancel', on: :member\nend uses singular resource which is wrong for collections.
  4. Final Answer:

    resources :orders, only: [:index, :show, :create] do\n post 'cancel', on: :member\nend -> Option C
  5. Quick Check:

    Use only with member block for custom POST route [OK]
Hint: Use member block with post for single resource custom action [OK]
Common Mistakes:
  • Using collection instead of member for single resource
  • Using singular resource for collections
  • Using wrong HTTP verb for custom action
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