![](/img/trans.png)
[英]How to store an array in a User model in a Ruby-On-Rails application?
[英]How to model “products” in an online store application
我正在建立一個網上商店來銷售“綠色超大號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”,並讓變體修改它,但這看起來過於復雜(並且可能不起作用)。
我已經看到了解決這種困境的兩種方法。 第一種是嘗試使用特征來定義“主要”產品的從屬產品。 這里面臨的挑戰是,除了您的想法之外,在大多數情況下,產品將隨着新的制造商的發展而發展,這些制造商將新的方面帶到了桌面上。 例如,一個制造商可以制造更便宜的產品,但是具有可能足以跟蹤的標志或縫合的不同應用方法。
我認為每個產品帶有一個不重要的產品編號,然后將這些特征作為屬性附加起來是最好的。 它易於搜索和擴展。 如果一組產品密切相關,則各個產品附加的ProductGroup效果很好。
在表格中:
ProductGroup
--------------------
ProductGroupID
ProductGroupName
ProductGroupDescription
Product
--------------------
ProductID
ProductGroupID
QtyOnHand
BasePrice
ProductColorID
ProductSizeID
ProductColor
------------
ProductColorID
ProductColorName
ProductSize
--------------
ProductSizeID
ProductSizeName
...more attributes...
這里的優點是你可以輕松查詢特定的屬性,屬性是“靈活的”,因為可以添加更多(和舊的調整:如果你開始使用“紅色”,但后來又添加了另一個“紅色”到顏色池,你可以將它們改為“栗色”和“鮮紅色”。
您可以在詳細的產品級別控制價格和庫存(盡管可能需要更多的表來計算采購成本)。
這一切都假設您的特征是普遍共享的。 如果不是,則可以通過在特征和產品詳細信息表之間創建連接表並根據需要填充來實現特征子表方法。 這將需要更多的業務邏輯。以確保每個產品類別都具備必要的所有特征。 在后一種情況下,我會在基本產品表中使用“原型”產品(數量和成本為0),我將從中克隆特征,然后在輸入每個新產品時進行調整。 隨着您的前進,當出現新的變化時,擁有“克隆此產品”功能,只允許您調整與基礎產品的差異將是有價值的。
最后,就管理庫存和定價而言,這將發生在UI層。 能夠為相關產品(產品組)生成查詢並管理相關產品的所有定價將大大有助於實現這一目標。
只是一個快速說明。 您可以隨時嘗試查看其他一些電子商務產品(如Spree和Substruct)的源代碼,他們可能已經為您解答了這個問題。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.