The simplest implementation I can manage of parent-child forms in Rails 3.1
Ruby CoffeeScript JavaScript
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Failed to load latest commit information.

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.