Hello, I think, you can to do it by using inheritance and STI for
Address model

class Person < AR::B
  has_one :shipping_address, :class_name => 'Address'
  has_one :billing_address, :class_name => 'Address'
end

class Address < AR::B
  belongs_to :person
end

class ShippingAddress < Address
end

class BillingAddress < Address
end

and add 'type' column to address table

But if you want to use one address for shipping and billing, it may be
hard in this way.

On Jul 25, 2:33 am, Emma <gkilo...@gmail.com> wrote:
> I'm having trouble with this model:
>
> class Person < AR::B
>   belongs_to :shipping_address, :class_name => 'Address'
>   belongs_to :billing_address, :class_name => 'Address'
> end
>
> class Address < AR::B
> end
>
> The problem is that I want Address to be a Value Object (as in DDD),
> and if I do this:
> p = Person.create :shipping_address => Address.new(...)
>
> and later I change the address:
> p.shipping_address = Address.new(...)
> p.save
>
> the first address object doesn't get deleted from the DB. It becomes
> an orphan.
>
> I can inverse the association and use a has_one but then I have to put
> two foreign keys in the address table... and that could be a problem
> because there are other models that have addresses.
>
> Another option could be to model both associations as composed_of but
> then I have to put all of the address table columns on the people
> table, and repeat this on the other models that have addresses too.
>
> How can I solve this? Any suggestions?
> Thanks in advance.
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups "Ruby 
on Rails: Talk" group.
To post to this group, send email to rubyonrails-talk@googlegroups.com
To unsubscribe from this group, send email to 
rubyonrails-talk+unsubscr...@googlegroups.com
For more options, visit this group at 
http://groups.google.com/group/rubyonrails-talk?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to