Relación entre dos modelos de herencia de una sola mesa
-
19-09-2019 - |
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
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