Relazione tra due modelli di ereditarietà tavolo singolo
-
19-09-2019 - |
Domanda
Ho le seguenti due modelli
class ContactField < ActiveRecord::Base
end
class Address < ContactField
end
class Phone < ContactField
end
e
class Contact < ActiveRecord::Base
end
class Company < Contact
end
class Person < Contact
end
Voglio un contatto, non importa è che società o persona, di avere molti ContactFields (indirizzi e telefoni) ... Allora, dove devo mettere quelli ha molti e appartiene a ? Grazie
Soluzione
È già detto in parole povere :-)
Voglio un contatto, non importa è che società o persona, di avere molti ContactFields (indirizzi e telefoni) ... Allora, dove dovrei mettere quelle ha molti e appartiene a? Grazie
class Contact < ActiveRecord::Base has_many :contact_fields end class ContactField < ActiveRecord::Base belongs_to :contact end
Questo rapporto sarà ereditato da entrambi l'indirizzo e il telefono
Altri suggerimenti
Sembra che si sta descrivendo una appartiene alla relazione. Le associazioni dovrebbero essere definiti nella classe padre, in modo che possano essere ereditate dalle sottoclassi.
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
Tuttavia @ contact.contact_fields sarà solo restituire i record ContactField. Se avete bisogno i metodi definiti in una qualsiasi delle classi secondarie si può sempre utilizzare il metodo diventa. Ci sono alcuni modi per aggirare questo. Tale aggiungendo le associazioni in più, come ho fatto io. O utilizzando ActiveRecord :: Base # diventa