Relation entre deux modèles d'héritage monotables
-
19-09-2019 - |
Question
Je les deux modèles suivants
class ContactField < ActiveRecord::Base
end
class Address < ContactField
end
class Phone < ContactField
end
et
class Contact < ActiveRecord::Base
end
class Company < Contact
end
class Person < Contact
end
Je veux un contact, peu importe qu'elle est société ou personne, d'avoir beaucoup ContactFields (Adresses et téléphones) ... Où dois-je mettre les a beaucoup et appartient à ? Merci
La solution
Vous avez déjà dit dans :-) anglais simple
Je veux un contact, peu importe qu'elle est société ou personne, d'avoir beaucoup ContactFields (Adresses et téléphones) ... Alors, où dois-je mettre les a beaucoup et appartient? Merci
class Contact < ActiveRecord::Base has_many :contact_fields end class ContactField < ActiveRecord::Base belongs_to :contact end
Cette relation sera héritée à la fois par l'adresse et le téléphone
Autres conseils
On dirait que vous décrivez appartient à une relation. Les associations doivent être définies dans la classe parente, de sorte qu'ils peuvent être hérités par les sous-classes.
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
Cependant @ contact.contact_fields vont juste retourner les enregistrements ContactField. Si vous avez besoin des méthodes définies dans l'une des sous-classes, vous pouvez toujours utiliser la méthode devient. Il y a quelques façons de contourner cela. Un tel ajout des associations supplémentaires, comme je l'ai fait. Ou en utilisant ActiveRecord :: # Base devient