views:

22

answers:

0

The core of this question is where build_attribute is required in a model with nested attribuites

I'm working with a few models that are setup like:

class Person < ActiveRecord::Base
  has_one :contact
  accepts_nested_attributes_for :contact, :allow_destroy=> true 
end

class Contact < ActiveRecord::Base
  belongs_to :person
  has_one :address, :as=>:addressable
  accepts_nested_attributes_for :address, :allow_destroy=> true  
end

class Address < ActiveRecord::Base
  belongs_to :addressable, :polymorphic=>true
end

I have to define the new method of people_controller like:

def new
  @person = Person.new
  @person.build_contact
  @person.contact.build_address  #!not very good encapsulation

  respond_to do |format|
    format.html # new.html.erb
    format.xml  { render :xml => @person }
  end
end

Without @person.contact.build_address the address relationship on contact is NIL. I don't like having to build_address in people_controller. That should be handled by Contact. Where do I define this in Contact since the contacts_controller is not involved here?