2009-10-14 5 views
0

Je suis en train de coder un site qui utilise des tags. Deux autres classes (Foo et Bar) utiliseront toutes deux des balises, mais les balises utilisées dans Foo ne s'appliqueront pas à Bar, et vice-versa. J'ai donc créé la table Tags avec les colonnes foo_id et bar_id, donc quand un enregistrement est sauvegardé, la clé étrangère pour le type d'objet correct peut être ajoutée.Des problèmes avec plusieurs colonnes de clé étrangère dans une classe Rails?

Cela va-t-il causer des problèmes? Y a-t-il une manière plus élégante de stocker des balises?

Répondre

1

Vous mettez en œuvre une relation plusieurs-à-plusieurs.

Utilisez une table de jointure avec tag_id, foo_id. Ensuite, dans vos classes de modèles, utilisez has_and_belongs_to_many ou has_many: through.

Utilisez une table de jointure séparée pour la barre.

Voir http://blog.hasmanythrough.com/2006/04/20/many-to-many-dance-off

+0

J'ai eu quelques problèmes avec l'identification des relations plusieurs-à-plusieurs. Merci pour le lien! –

1

Vous pouvez avoir séparé tables de jointure comme jakber dit, ou à usage unique Héritage de Table, stocker à la fois les balises foo et balises bar dans la même table avec un champ type qui indique si le id est un foo ou pour un bar.

Vous aimerez aussi le plugin acts _ as _ taggable _ on _ steroids, c'est très simple et gère bien les tags.

Questions connexes