8

我正在建立一个在线商店来销售“绿色超大号 T 恤”之类的产品。即,同一件衬衫可以有多种尺寸/颜色,不同的组合可以售罄,不同的组合可能有不同的价格等。

我的问题是我应该如何在我的 Rails 应用程序中对这些产品进行建模(或者实际上如何在任何应用程序中进行建模)。

我目前的想法是:

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

因此,每个产品将具有一个或多个特性(例如,“颜色”、“尺寸”等),然后每个特性将具有一个或多个变体(例如,“红色”、“蓝色”等)。

这种方法的问题是我在哪里存储价格和库存?即,给定产品的价格和库存由其特征所采用的变体决定。(绿色可能比红色贵,大的可能缺货等)。

我的一个想法是给产品一个“base_price”,并让变体修改它,但这似乎过于复杂(并且可能不起作用)。

4

2 回答 2

13

我已经看到了解决这种困境的两种方法。一是尝试用特性来定义“主”产品的从属产品。这里的挑战是,除了您的想法之外,在大多数情况下,产品将随着新制造商的发展而发展,从而带来新的方面。例如,一家制造商可能会生产更便宜的产品,但对标志或缝线有不同的应用方法,这可能足以跟踪。

我认为为每个产品携带一个不重要的产品编号,然后将特征附加为属性效果最好。它易于搜索和扩展。如果一组产品密切相关,则单个产品附加到的 ProductGroup 效果很好。

在表格中:

            ProductGroup
            --------------------
            ProductGroupID
            ProductGroupName
            ProductGroupDescription

            Product
            --------------------
            ProductID
            ProductGroupID
            QtyOnHand
            BasePrice
            ProductColorID
            ProductSizeID

            ProductColor
            ------------
            ProductColorID
            ProductColorName

            ProductSize
            --------------
            ProductSizeID
            ProductSizeName

            ...more attributes...

此处的优点是您可以轻松查询特定属性,属性是“灵活的”,因为可以添加更多属性(并且旧属性已调整:如果您从“红色”开始,然后在颜色池中添加了另一个“红色”,您可以将它们更改为“栗色”和“亮红色”。

您可以在详细的产品级别控制价格和库存(尽管可能需要更多表格来说明采购成本)。

这一切都假设您的特征是普遍共享的。 如果不是,您的特征子表方法可以通过在特征和产品详细信息表之间创建一个连接表并根据需要进行填充来工作。这将需要更多的业务逻辑。以确保每个产品类别获得所有必要的特征。在后一种情况下,我将在基本产品表中使用“原型”产品(数量和成本为 0),我将从中克隆特征,然后在输入每个新产品时进行调整。随着您的前进,当出现新的变体时,具有“克隆此产品”功能,允许您调整与基本产品的差异,这将是有价值的。

最后,就管理库存和定价而言,这将发生在 UI 层。能够为相关产品(产品组)生成查询并管理相关产品的所有定价将大大有助于使其宜居。

于 2009-04-02T23:20:24.617 回答
2

只是一个速记。您可以随时尝试查看其他一些电子商务产品的源代码,例如SpreeSubstruct,他们可能已经为您回答了这个问题。

于 2009-04-05T16:44:52.780 回答