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

Était-ce utile?

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

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top