2010-12-07 5 views
1

Disons que vous avez un modèle de livre qui peut appartenir à plusieurs catégories. Les catégories sont prédéfinies, mais nous pouvons laisser l'utilisateur ajouter le sien, même si la plupart du temps par défaut suffisent.Attribut avec plusieurs valeurs dans les rails: booléens, chaîne et sérialiser ou hbtm?

Quelle est la meilleure façon de gérer cela selon vous?

a) une relation de plusieurs à plusieurs avec un modèle de catégorie? Mais n'est-ce pas exagéré compte tenu du fait que les catégories par défaut sont suffisantes la plupart du temps? b) booléens pour chaque catégorie par défaut et une chaîne supplémentaire pour les catégories entrées par l'utilisateur C) juste une chaîne et l'utilisation de sérialiser? Mais alors il pourrait être un peu plus difficile d'utiliser les cases à cocher pour les choix par défaut d) toute autre suggestion de la vôtre ...

Merci pour votre temps!

Merci

Répondre

2

Vous voudrez probablement utiliser HABTM. Ce n'est pas exagéré si vous voulez un jour collecter des informations sur les différentes catégories; date créée, par exemple. Vous pourrez également récupérer facilement tous les livres pour une catégorie donnée sans avoir à vous soucier des portées dans le modèle de livre.

En outre, vous pourriez vouloir ajouter d'autres objets aux catégories. Il n'y a pas beaucoup de frais généraux, et c'est assez simple à mettre en place, donc ça vaut le coup, à mon humble avis.

Pour obtenir de l'aide sur la mise en œuvre de HABTM avec des cases à cocher, consultez le HABTM Checkboxes railscast. Pour une discussion des différences entre HABTM et has_many :through, je recommande vraiment les railscasts Two Many-to-Many.

+0

Si vous souhaitez collecter des informations sur les catégories, vous devez le configurer comme suit: has_many: through => relation. HABTM est en train de tomber en disgrâce pour cette raison. – brycemcd

+0

Je voulais dire sur chaque catégorie objet lui-même - c'est certainement vrai pour le suivi des informations sur la jointure entre une catégorie et un livre. Il semble que ces présentations montrent la seule utilisation valide de HABTM ... certaines implémentations de catégories. –

+0

Qu'en est-il des performances dans ce cas? Il me semble que l'utilisation de hbtm nécessitera l'implémentation de chargement ou de mise en cache plus tard, mais peut-être plus tôt qu'avec les autres solutions. Surtout s'il y a quelques autres attributs comme la catégorie. Ai-je tort de croire cela? – Nycen

Questions connexes