Goal
You’ll be able to set up nested resources and handle nested attributes in forms, and understand precisely when a route genuinely needs to be nested versus when it doesn’t.
Learn
Nested resources represent a genuine parent-child relationship directly in the URL structure:
# config/routes.rb resources :posts do resources :comments end # generates /posts/:post_id/comments, /posts/:post_id/comments/:id, etc.
This makes sense specifically when a child resource genuinely can’t exist meaningfully without its parent context — a comment inherently belongs to one specific post, so accessing it through /posts/1/comments/5 makes the relationship explicit in the URL itself.
Nested attributes let you create or update an associated record through its parent’s form, in one single submission:
class Order < ApplicationRecord has_many :line_items accepts_nested_attributes_for :line_items end
<%= form_with model: @order do |f| %>
<%= f.fields_for :line_items do |line_item_form| %>
<%= line_item_form.text_field :product_name %>
<% end %>
<% end %> This lets a user create an order and its associated line items in a single form submission, rather than needing separate steps — genuinely useful for exactly this kind of “parent with several child records created together” pattern.
A genuinely important guideline: nest routes only one level deep as a general rule. Deeply nested routes (like /posts/1/comments/5/replies/2) become genuinely awkward to work with and are usually a sign the relationship should be restructured, rather than continuing to nest further.
Decision Task
You’re deciding whether to nest a “reviews” resource under “products” (giving /products/:product_id/reviews) or keep it a top-level /reviews route. Before reading on: which fits better if a review genuinely only makes sense in the context of one specific product?
Show Answer
Nested — /products/:product_id/reviews correctly represents the genuine parent-child relationship directly in the URL, matching the fact that a review inherently belongs to and only makes sense within the context of one specific product. A top-level /reviews route would lose that meaningful contextual relationship entirely, treating reviews as if they existed independently of any specific product.
Common Mistake
Nesting resources multiple levels deep (like posts/comments/replies/reactions), rather than stopping at one level and reconsidering the actual relationship structure. Deeply nested routes become genuinely awkward to work with in both routing and controller code — one level of nesting is a reasonable general guideline, with anything deeper usually signaling a design that needs rethinking.
Practice Questions
1. Write a nested route configuration where a Recipe resource has nested Ingredient resources.
Show Answer
resources :recipes do\n resources :ingredients\nend
2. What does accepts_nested_attributes_for :line_items on an Order model enable?
Show Answer
Creating or updating associated line_items records through the parent Order’s own form, in a single submission.
3. Why does nesting a comments resource under posts (rather than keeping it top-level) genuinely make sense?
Show Answer
A comment inherently belongs to and only makes sense within the context of one specific post, and the nested route structure correctly represents that genuine parent-child relationship.
4. True or False: it’s generally good practice to nest resources as many levels deep as the actual data relationships require.
Show Answer
False — nesting one level deep is a reasonable general guideline; deeper nesting typically becomes awkward and usually signals a relationship structure that should be reconsidered.
5. What form helper is used inside a parent form to handle nested attributes for an associated model?
Show Answer
fields_for
Try It Yourself
Without looking back, write a nested route configuration for an Event resource with nested Attendee resources, and explain in one sentence why nesting genuinely fits this relationship.
Show Answer
resources :events do\n resources :attendees\nend — nesting fits because an attendee record inherently belongs to and only makes contextual sense within one specific event, matching the genuine parent-child relationship this lesson’s nesting guideline is based on.
Quick Check
1. What do nested resources represent in the URL structure?
Show Answer
A genuine parent-child relationship between two resources.
2. What does accepts_nested_attributes_for enable?
Show Answer
Creating or updating an associated record through its parent’s own form, in one submission.
3. What form helper handles nested attributes inside a parent form?
Show Answer
fields_for
4. What’s the general guideline for how deep to nest routes?
Show Answer
One level deep as a general rule; deeper nesting usually signals a relationship that should be reconsidered.
5. When does nesting a route genuinely make sense?
Show Answer
When a child resource genuinely can’t exist meaningfully without its parent context.