在线购物店产品的更好模型设计

6
如何设计同一产品的不同颜色、尺寸、数量和价格模型。以下是当前模型方案:
Product
* Name
* Price
* Color
* Quantity
* Size

如何在同一购物区域展示具有不同属性的相同产品?
以A&F购物页面为例,
当您访问此页面时,表示您正在购买COBBLE HILL TEE。
我认为COBBLE HILL TEE的不同颜色和尺寸必须是产品模型中不同的产品实例,对吗?
例如,以下三个实例属于COBBLE HILL TEE,但它们在模型中是不同的实例。
 `COBBLE HILL TEE`, `$39`, `Red`, `1`, `XL`
 `COBBLE HILL TEE`, `$39`, `White`, `3`, `L`
 `COBBLE HILL TEE`, `$37`, `White`, `5`, `S`

所以应该有一列来标识哪些产品应该被归为同一个产品,比如“COBBLE HILL TEE”,对吗?
当这些记录在“product_sn”列中具有相同的值时,我应该添加一个名为“product_sn”的列,它们应该被收集到同一个购物页面中吗?
抱歉我的英语不好,无法清楚地表达我的问题。 enter image description here

你的“当前模型架构”非常完美。继续保持。 - Pavan
1个回答

8

我喜欢软件中的模块化,并相应地创建模型。我认为这个想法会对你有所帮助,因此我会为你解释一下:


模型

我喜欢保持模型的可扩展性 - 这样您可以添加数百万个项目,仍然可以按照正确的方式运作。

为此,我们有“筒仓”数据库(我不确定这是否是正确的术语),然后在其周围有“参考”模型。

“筒仓”数据库/模型基本上存储静态数据(例如产品用户)。参考数据库/模型基本上为筒仓数据库提供更多范围 - 例如为产品添加选项或为用户添加配置文件

在您的情况下,我肯定会这样做:

#app/models/product.rb
Class Product < ActiveRecord::Base
    has_many :options, as: :optable do
       def colours 
          where name: "colour"
       end
    end
end

#app/models/option.rb
Class Options < ActiveRecord::Base
    belongs_to :optable, polymorphic: true
end

模式:

#products
id | name | SKU | stock | etc | etc | created_at | updated_at

#options
id | optable_type | optable_id | name | value | created_at | updated_at

--

关联

这是一个多态关联(因此您可以将options模型与其他不相关的模型一起使用):

enter image description here

这意味着您将能够调用:
@product = Product.find params[:id]
@product.options #-> returns all `Option` records for `product` (`price`, `size`, `etc`)

如果你设置得当,你应该能够做到这一点:

#config/routes.rb
resources :products, only: :show #-> domain.com/products/14

#app/controllers/products_controller.rb
class ProductsController < ActiveRecord::Base
   def show
       @product = Product.find params[:id]
   end
end

#app/views/products/show.html.erb
<%= @product.name %>
<% @product.options.each do |option| %>
    <%= option.size %>
    <%= option.price %>
    <%= option.colour %>
<% end %>

如果您想调用“产品”的“颜色”选项,则可以执行以下操作:
@product = Product.find params[:id]
@product.options.colours #-> will output all colours for the product

注意事项

我的代码的一个主要注意事项是我提供的选项没有任何结构。如果您想为产品设置特定的选项集(例如为特定产品设置大小颜色数量),您可能希望在您的Option模型中使用自引用关联,如果您需要,我可以这样做。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接