use*_*188 6 shopping-cart ruby-on-rails e-commerce
如何为不同颜色,尺寸,数量和价格的同一产品设计模型.
这是我目前的模型方案,
Product
* Name
* Price
* Color
* Quantity
* Size
Run Code Online (Sandbox Code Playgroud)
如何在同一个购物区中显示具有不同属性的相同产品?
让我以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`
Run Code Online (Sandbox Code Playgroud)
因此,应该有一个专栏来确定应该将哪些产品收集到同一产品中COBBLE HILL TEE,对吧?
我应该添加一个名为的列product_sn,当这些记录具有相同的值时product_sn,它们应该收集在同一个购物页面中吗?
抱歉我的英语不好用来描述我的问题

我喜欢软件中的模块化,并相应地创建模型.我想你会从这个想法中受益,所以我会为你解释一下:
楷模
我喜欢保留模型以使模型可扩展 - 因此您可以添加1,000,000个项目,并且仍然以正确的方式工作.
要做到这一点,我们有"孤岛"数据库(我不确定这是否是正确的术语),然后围绕它有"参考"模型.
"silo"数据库/模型基本上存储静态数据(例如products或users).参考数据库/模型基本上得到silo数据库的详细范围-如添加options到products或profile为users.
在你的情况下,我肯定会这样做:
#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
Run Code Online (Sandbox Code Playgroud)
架构:
#products
id | name | SKU | stock | etc | etc | created_at | updated_at
#options
id | optable_type | optable_id | name | value | created_at | updated_at
Run Code Online (Sandbox Code Playgroud)
-
协会
这是一个多态关联(因此您可以将该options模型与其他不相关的模型一起使用):

这意味着您将能够致电:
@product = Product.find params[:id]
@product.options #-> returns all `Option` records for `product` (`price`, `size`, `etc`)
Run Code Online (Sandbox Code Playgroud)
如果你设置正确,你应该能够这样做:
#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 %>
Run Code Online (Sandbox Code Playgroud)
如果你想叫一个product的colour选项,你可以再做:
@product = Product.find params[:id]
@product.options.colours #-> will output all colours for the product
Run Code Online (Sandbox Code Playgroud)
注意事项
我的代码的一个主要警告是options我提供的不是任何方式的结构.如果你想有一个特殊set的选项产品(就像有size,colour,quantity对于特定的产品,你可能希望使用self-referential联想在你的Option模型,我可以,如果你想要做的
| 归档时间: |
|
| 查看次数: |
1271 次 |
| 最近记录: |