Pregunta

Tengo los dos modelos siguientes

class ContactField < ActiveRecord::Base
end

class Address < ContactField
end

class Phone < ContactField
end

y

class Contact < ActiveRecord::Base
end

class Company < Contact
end

class Person < Contact
end

Quiero un contacto, no importa es que la empresa o la persona, tener muchos ContactFields (direcciones y teléfonos) ... Entonces, ¿dónde debo poner los tiene muchos y pertenece a ? Gracias

¿Fue útil?

Solución

Ya lo dijo en Inglés llanura :-)

  

Quiero un contacto, no importa es que la empresa o la persona, tener muchos ContactFields (direcciones y teléfonos) ... Entonces, ¿dónde debo poner los tiene muchas y pertenece a? Gracias

class Contact < ActiveRecord::Base
 has_many :contact_fields
end

class ContactField < ActiveRecord::Base
 belongs_to :contact
end

Esta relación será heredado por tanto la dirección y el teléfono

Otros consejos

Parece que usted está describiendo una pertenece a la relación. Las asociaciones deben ser definidos en la clase padre, para que puedan ser heredados por las subclases.

class ContactField < ActiveRecord::Base
  belongs_to :contact
  belongs_to :company, :foreign_key => :contact_id
  belongs_to :person, :foreign_key => :contact_id
end

class Contact < ActiveRecord::Base
  has_many :contact_fields
  has_many :addresses
  has_many :phones
end

Sin embargo @ contact.contact_fields se acaba de devolver registros ContactField. Si necesita los métodos definidos en cualquiera de las subclases se puede utilizar siempre el método se convierte. Hay algunas maneras de evitar eso. Tal adición de las asociaciones adicionales, como lo hice. O el uso de ActiveRecord :: Base # convierte

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top