Nested Form
A Rails gem to conveniently manage multiple nested models in a single form. It does so in an unobtrusive way through jQuery.
To learn more about how this works under the hood: blog.madebydna.com/dynamic-nested-forms-in-rails-3-with-the-nest
Install
Add it to your Gemfile
gem "nested_form"
Run
bundle install
Run the generator
rails generate nested_form:install
Usage
Running the generator will add a file at public/javascripts/nested_form.js which should be included after the jQuery or Prototype framework.
<%= javascript_include_tag :defaults, "nested_form" %>
You can then generate a nested form using the nested_form_for helper method.
<%= nested_form_for @project do |f| %>
Use this form just like normal, including the fields_for
helper method for nesting models. The benefit of this plugin comes from the link_to_add
and link_to_remove
helper methods on the form builder.
<%= f.fields_for :tasks do |task_form| %>
<%= task_form.text_field :name %>
<%= task_form.link_to_remove "Remove this task" %>
<% end %>
<%= f.link_to_add "Add a task", :tasks %>
This generates links which dynamically add and remove fields.
Partials
It is often desirable to move the nested fields into a partial to keep things organized. If you don’t supply a block to fields_for it will look for a partial and use that.
<%= f.fields_for :tasks %>
In this case it will look for a partial called “task_fields” and pass the form builder as an f variable to it.
Special Thanks
This gem was originally based on the solution by Tim Riley in his complex-form-examples fork.
Thank you Andrew Manshin for the Rails 3 transition, Andrea Singh for converting to a gem and Peter Giacomo Lombardo for Prototype support.