Skip to content


Subversion checkout URL

You can clone with
Download ZIP
The simplest implementation I can manage of parent-child forms in Rails 3.1
Ruby CoffeeScript JavaScript
Failed to load latest commit information.
doc Basic working template
lib Basic working template
public Basic working template
.gitignore Basic working template
Gemfile.lock Updated to Rails 3.1 released version
Rakefile Basic working template

Simple parent-child forms in Rails 3.1

This is an attempt to make the simplest possible Rails 3.1 template for nested forms (i.e. a parent-child relationship between two tables). We aim to support CRUD actions for both parent and child. You can either download the template for your project or follow the instructions below to create your own objects.

We will create Mom and Kid objects. You can create, update and destroy Moms and Kids. Kids each have one Mom but Moms can have many Kids.

The minimum configuration and coding has been done to make this work. Please let me have any suggestions for improvements - I'm not a Rails or Ruby expert.

-- Dominic Sayers

Downloading the template app

  1. git clone git:// myapp (where myapp is your application name).

  2. cd myapp

  3. bundle update

  4. rails s

  5. Point your browser to http://localhost:3000/moms.

Creating your own simple app

Here's the exact steps I performed to create this app:

  1. At the command prompt, create a new Rails application: rails new myapp (where myapp is your application name). If you want HTML5 goodness then rails new myapp -m

  2. cd myapp

  3. rails g scaffold Mom name:string

  4. rails g model Kid name:string mom:references

  5. Add the following lines to app/models/mom.rb

    has_many :kids, :dependent => :destroy
    accepts_nested_attributes_for :kids, :allow_destroy => :true
  6. rake db:migrate

  7. In config/routes.rb, change resources :moms to

    resources :moms do
      resources :kids
  8. rails g controller Kids

  9. Add the following methods to app/controllers/kids_controller.rb

    def create
      @mom = Mom.find(params[:mom_id])
      @kid =[:kid])
      redirect_to mom_path(@mom)
    def destroy
      @mom = Mom.find(params[:mom_id])
      @kid =[:id])
      redirect_to mom_path(@mom)
  10. Add the following lines to app/views/moms/show.html.erb before the line containing <%= link_to 'Edit', edit_mom_path(@mom) %> |

    <%= render %>
    <h3>Add kid</h3>
    <%= render 'kids/form' %>
  11. Create a file app/views/kids/_kid.html.erb with the following code:

      <%= %>
      <%= link_to 'Remove', [, kid], :confirm => 'Really remove kid?', :method => :delete %>
  12. Create a file app/views/kids/_form.html.erb with the following code:

    <%= form_for([@mom,]) do |f| %>
      <div class="field">
        <%= f.label :name %> <%= f.text_field :name %>
      <div class="actions">
        <%= f.submit %>
    <% end %>
  13. rails s

  14. Point your browser to http://localhost:3000/moms.

Something went wrong with that request. Please try again.