Estoy construyendo una tienda en línea para vender productos como "Camisetas extragrandes verdes". Es decir, la misma camisa puede tener muchos tamaños/colores, una combinación diferente puede agotarse, una combinación diferente puede tener precios diferentes, etc.Cómo modelar "productos" en una aplicación de tienda en línea
Mi pregunta es cómo debo modelar estos productos en mi aplicación Rails (o cómo hacerlo realmente hazlo en cualquier aplicación).
Mi pensamiento actual es:
Class Product
has_many :variants, :through => :characteristics
has_many :characteristics
end
Class Characteristic
belongs_to :product
belongs_to :variants
end
Class Variant
has_many :products, :through => :characteristics
belongs_to :characteristic
end
Así que cada producto tendrá una o más características (por ejemplo, "Color", "Tamaño", etc), y cada característica a continuación, tendrán una o más variantes (por ejemplo, "Rojo", "Azul", etc.).
El problema con este método es ¿dónde guardo el precio y el inventario? Es decir, el precio y el inventario de un determinado producto están determinados por las variantes que adoptan sus características. (El verde puede ser más caro que el rojo, grande puede estar agotado, etc.).
Una idea que tuve fue dar a los productos un "precio base", y dejar que las variantes lo modifiquen, pero esto parece demasiado complejo (y podría no funcionar).
Este es un buen consejo. En la empresa para la que trabajo tenemos solo dos tablas: Product y ProductItem, y el color y el tamaño no se normalizaron correctamente. Hace que administrar/asociar imágenes específicas de color sea una pesadilla absoluta. Así es como lo haría; el color y el tamaño son conceptos de primera clase ... –
... y nos encontramos con escenarios donde "los amarillos se hacen en Tailandia pero los blancos son de China", pero como los almacenamos en el nivel de Producto, podemos No lo modela y termina duplicando el SKU, lo que causa otros problemas. Ser flexible pero proporcionar UI para los escenarios comunes es un consejo de +1. –
Gracias Nicholas. Este consejo proviene de ser quemado con demasiada frecuencia al asumir que las características "fáciles" pueden ser simplemente rellenas en la mesa principal. Puedo ver fácilmente que la tabla "Color" finalmente gana más atributos debido a las diferencias de origen. Engraname una vez ... – Godeke