2010-08-01 18 views
0

que j'ai un animal de table qui a une colonne PARENT_ID Dites aussi que j'ai un type_id sur la table pour indiquer les espècesRails activerecord composite clé Id et le type

Ainsi, dans ma classe d'animaux, Animall.all retourneraient Tous les animaux. Disons que maintenant j'ajoute deux nouveaux types d'animaux, chien et chat dans la table animals_types. Alors maintenant, certains animaux ont type_id de 1 et quelques 2.

Je pourrais écrire un named_scope sur Animal pour renvoyer tous les chats ou tous les chiens.

Mais si je voulais aller la route de la création de classes de chats et de chiens qui font référence à la table des animaux, donc en classe de chien, dog.all doit émettre une requête, sélectionnez * à partir d'animaux où type_id = 1

Puis dites que je crée une classe appelée person, et que j'ai ajouté une relation has_many: dogs

Comment puis-je faire en sorte que cela fonctionne?

Répondre

1

Le chemin dans les rails pour ce faire est STI (héritage Table unique). Réponse courte est votre ajouter un champ de type à la table, puis animal sous-classe.

voir http://api.rubyonrails.org/classes/ActiveRecord/Base.html

donc dans votre cas, vous auriez.

class Animal < ActiveRecord::Base; end 
class Dog < Animal; end 
class Cat < Animal; end