Just today I had to rebuild a Member form in our app, where a Member
belongs to a User
which has many PhoneNumber
s.
The Member
model accepts_nested_attributes_for :user
and the User
model accepts_nested_attributes_for :phone_numbers
Using the cocoon gem, I am able to do the following in my Member form:
# phone number fields in members/_form.html.haml
# if you do use this on a new (know you said edit but just in case) ... be sure to instantiate the association
# in my case: @member.user.phone_numbers.build
# u represents the User part of the form ... typically 'f'
= u.simple_fields_for :phone_numbers do |phone|
= render 'users/phone_number_fields', f: phone
.add-phone-link-wrapper.pull-right
= link_to_add_association 'Add Phone', u, :phone_numbers, class: 'btn btn-orange btn-mini add-remove-links', partial: 'users/phone_number_fields', render_options: { wrapper: 'bootstrap' }
# 'users/phone_number_fields' partial
.nested-fields
= f.input :phone
= f.input :phone_label, as: :select, collection: PhoneNumber::LABELS
= f.input :display_number, as: :boolean
= link_to_remove_association 'Remove Phone', f, class: 'btn btn-red btn-mini add-remove-links pull-right', render_options: { wrapper: 'bootstrap' }
Note: I use SimpleForm and cocoon has some differences in implementation depending on your form builder (all on their github page/wiki).
For our needs, this fit perfectly.