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

Foi útil?

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

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top