2008-09-19 4 views
0

Pour un projet sur lequel je travaille, le magasin propose deux types de produits: un produit réel et un groupe de produits. Pour cette discussion, appelons-les «1 T-shirt» et «une boîte de T-shirts». Pour un t-shirt, j'ai besoin de stocker les attributs normaux - prix, sku, taille, couleur, description, etc. Pour la boîte de t-shirts, j'ai besoin d'avoir un prix, sku, description, et une liste de t- chemises qui sont incluses.Modèles polymorphes en Ruby on Rails?

Donc maintenant, je représente cela avec les modèles Shirt et ShirtCollection. Je peux voir cela causer de la difficulté à l'avenir lorsque je dois gérer les rapports et les commandes et m'assurer que les UGS sont uniques.

Alors, quelle est la meilleure façon de représenter cela?

Répondre

1

j'aurais les modèles suivants

T-shirt
TshirtBox has_many TshirtItems
TshirtBoxItems (Ceci est essentiellement une table de jointure avec un tshirt_box_id identifiant et tshirt_id) belongs_to TshirtBox

TshirtBoxItems est un moyen de relier un T-shirt avec une boîte et potentiellement d'autres choses dans le futur.

2

Vous pouvez avoir une table Tshirt, puis l'auto-référencer avec une association has_many: through.

T-shirt - id, sku, le prix, la taille, la couleur, la description, is_box

TshirtBox - parent_tshirt (id qui fait référence tshirt), child_tshirt (id qui fait référence tshirt)

Consultez ce lien pour plus sur autoréférentiel has_many: à travers http://www.aldenta.com/2006/11/10/has_many-through-self-referential-example/