如何为不同颜色,尺寸,数量和价格的同一产品设计模型。
这是我目前的模特计划,
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
中具有相同的值时,它们应该收集在同一个购物页中吗?
抱歉我的英语不好用来描述我的问题
答案 0 :(得分:7)
我喜欢软件中的modularity,并相应地创建模型。我想你会从这个想法中受益,所以我会为你解释一下:
<强>模型强>
我喜欢保留模型以使模型具有可扩展性 - 因此您可以添加1,000,000个项目,并且仍然能够以正确的方式运行。
要做到这一点,我们有&#34; silo&#34;数据库(我不确定这是否是正确的术语),然后有&#34;参考&#34;围绕它的模型。
&#34;筒仓&#34;数据库/模型基本上存储静态数据(例如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
架构:
#products
id | name | SKU | stock | etc | etc | created_at | updated_at
#options
id | optable_type | optable_id | name | value | created_at | updated_at
-
<强>协会强>
这是polymorphic association(因此您可以将options
模型与其他不相关的模型一起使用):
这意味着您可以致电:
@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
colour
个选项,则可以执行以下操作:
@product = Product.find params[:id]
@product.options.colours #-> will output all colours for the product
<强>注意事项强>
我的代码的一个主要警告是我提供的options
没有以任何方式构建。如果您希望产品具有特定的set
选项(例如,对于特定产品,size
,colour
,quantity
,您可能希望使用{{ 3}}在你的Option
模型中,如果你想要我可以做的