Nested Forms with belongs_to association

Hi all,

I have a relationship in this form: A person belongs to an address and a address can have many persons like below:

class Person < ActiveRecord::Base   belongs_to :address end

class Address < ActiveRecord::Base   has_many: persons end

The ideia behind this is, if two or more persons share the same address, isn't necessary create two indetical rows in the database. But, like i'm new in the rails development, i want to create a form for person creation and edition that wraps the creation of related address, as a nested form. I already made a search for a solution for this problem, but the solutions that i found in others sites are for the inverse associations, any idea?

Thanks.

You should probably have the Person have an Address, that way you can nest the Address creation form within your Person form. Logically, you shouldn't nest the form of an Address within a Person form since it's the Address that owns the Person according to your current model...

Mlle wrote:

You should probably have the Person have an Address, that way you can nest the Address creation form within your Person form. Logically, you shouldn't nest the form of an Address within a Person form since it's the Address that owns the Person according to your current model...

No, no. I solved the issue and the creation makes sense. View this post and you will understand why.

I'm relatively new to Rails myself, though I've been somewhat successful with nested model associations in both directions.

Models: class Person < ActiveRecord::Base   belongs_to :address   accepts_nested_attributes_for :address end

class Address < ActiveRecord::Base   has_many: persons   accepts_nested_attributes_for :persons end

Controller: class PersonsController < ApplicationController def new   @person = Person.new   @person.address = Address.new end def create   @person = Person.new params[:person]   if @person.save     redirect_to :show   else     render :new   end end end class AddressesController < ApplicationController def new   @address = Address.new   1.times { @address.persons.build } # increase 1 to default number of people at address end def create   @address = Address.new params[:address]   if @address.save     redirect_to :show   else     render :new   end end

Views: # persons/new.html.erb <% form_for @person do |person_fields| %>   <% person_fields.fields_for :address do |address_fields| %>     <%= address_fields.label ... %>   <% end %> <% end %> # addresses/new.html.erb <% form_for @address do |address_fields| %>   <% address_fields.fields_for :persons do |person_fields| %>     <%= person_fields.label ... %>   <% end %> <% end %>

If you get weird errors such as HashWithIndifferentAccess, try refreshing your browser, so it pulls in a fresh form.

Hope that helps, Mike