How can I add two models in one form, where one model is a has_many :through?

Posted by Angela on Stack Overflow See other posts from Stack Overflow or by Angela
Published on 2010-05-09T03:19:03Z Indexed on 2010/05/12 7:14 UTC
Read the original article Hit count: 179

How do I model having multiple Addresses for a Company and assign a single Address to a Contact?

Contacts belong_to a Company. A Company has_many Contacts.

A Company also has_many Addresses. And each Contact has_one Address.

I want to be able, whenever I create a New Contact, to access all the addresses in all Contacts that belong to the Company.

Here is are my Models:

class Company < ActiveRecord::Base
  attr_accessible :name, :phone, :addresses

  has_many :contacts
  has_many :addresses, :through => :contacts

end

class Contact < ActiveRecord::Base
  attr_accessible :first_name, :last_name, :title, :phone, :fax, :email, :company, 
                  :date_entered, :campaign_id, :company_name, :address

  belongs_to :company
  has_one :address
  accepts_nested_attributes_for :address
end

class Address < ActiveRecord::Base
  attr_accessible :street1

  has_many :contacts
end

How do I create the View in the _form for Contacts so that I can 1) Add an Address when creating a Contact; 2) Display the options of the Address.

Here is how I am doing step 1, which is just to add a new address for a new contact:

  <% f.fields_for :addresses do |builder| %>
  <p>
    <%= builder.label :street1, "Street 1" %> </br> 
    <%= builder.text_field :street1 %>
  <p>

Right now, what I have doesn't work. The console says I cannot mass-assign addresses when I hit "submit" on this New contact form.

© Stack Overflow or respective owner

Related posts about has-many-through

    Related posts about aggregation