Relação entre dois modelos de transmissão de mesa única
-
19-09-2019 - |
Pergunta
Eu tenho os dois modelos seguintes
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
Eu quero um contato, não importa o que é empresa ou pessoa, para ter muitos ContactFields (endereços e telefones) ... Então, onde devo colocar os tem muitas e pertence a ? Graças
Solução
Você já disse isso na planície Inglês :-)
Eu quero um contato, não importa o que é empresa ou pessoa, para ter muitos ContactFields (endereços e telefones) ... Então, onde eu deveria colocar aqueles tem muitos e pertence? Graças
class Contact < ActiveRecord::Base has_many :contact_fields end class ContactField < ActiveRecord::Base belongs_to :contact end
Esta relação será herdada por ambos endereço e telefone
Outras dicas
Parece que você está descrevendo um pertence a relação. As associações devem ser definidos na classe pai, para que eles possam ser herdado pelas subclasses.
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
No entanto @ contact.contact_fields só vai retornar registros ContactField. Se você precisar os métodos definidos em qualquer uma das subclasses você sempre pode usar o método se torna. Existem algumas maneiras de contornar isso. Tal adicionando as associações extras, como eu fiz. Ou usando ActiveRecord :: Base # se torna