Beziehung zwischen zwei Einzeltabellenvererbungsmodelle
-
19-09-2019 - |
Frage
Ich habe die folgenden zwei Modelle
class ContactField < ActiveRecord::Base
end
class Address < ContactField
end
class Phone < ContactField
end
und
class Contact < ActiveRecord::Base
end
class Company < Contact
end
class Person < Contact
end
Ich möchte ein Kontakt, egal ist es Unternehmen oder Person, viele ContactFields zu haben (Adressen und Telefone) ... Also, wo soll ich jene setzen viele hat und gehört ? Dank
Lösung
Sie schon gesagt, es in einfachem Englisch :-)
Ich möchte ein Kontakt, egal ist es Unternehmen oder Person, zu viele ContactFields haben (Adressen und Telefone) ... Also, wo soll ich jene setzen hat viele und gehört? Dank
class Contact < ActiveRecord::Base has_many :contact_fields end class ContactField < ActiveRecord::Base belongs_to :contact end
Diese Beziehung wird sowohl von Adresse und Telefon
vererbt werdenAndere Tipps
Sieht aus wie Sie beschreiben eine gehört zur Beziehung. Die Verbände sollten in der übergeordneten Klasse definiert werden, so dass sie von den Unterklassen vererbt werden.
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
Allerdings @ contact.contact_fields wird nur ContactField Datensätze zurück. Wenn Sie die Methoden der Definition in einem der Teilklassen benötigen, können Sie immer die Methode wird. Es gibt ein paar Möglichkeiten, um die. Eine solche Zugabe die zusätzlichen Verbände, wie ich es tat. Oder mit Activerecord :: Base # wird