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 -~----------~----~----~----~------~----~------~--~---