2014-06-08 20 views
5

如何設計具有不同顏色,大小,數量和價格的同一產品的模型。在線購物商店中的產品更好的模型設計

這裏是我當前的模型方案,

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

+0

你'目前的模式模式是完美的。繼續與它。 – Pavan

回答

6

我喜歡在軟件modularity,並創建相應的模型。我想你會從這個想法中受益,所以我會解釋給你:


模式

我喜歡讓模特做模型擴展 - 這樣你就可以添加1000000的項目,並仍然以正確的方式工作。要做到這一點,我們有「孤島」數據庫(我不確定這是否是正確的術語),然後在它周圍有「參考」模型。

「筒倉」數據庫/模型基本上存儲靜態數據(如productsusers)。參考數據庫/模型基本上爲silo數據庫提供了更多範圍 - 例如將options添加到productsprofile對於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與其他不相關的模型模型):

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 %> 

如果你想叫一個productcolour選項,你可以再做:

@product = Product.find params[:id] 
@product.options.colours #-> will output all colours for the product 

注意事項

一個與我的代碼的主要注意事項是我提供以任何方式不規整的options。如果你想有一個產品(選項的特殊set就像sizecolourquantity特定產品,您不妨在你的Option模型,我可以,如果你想要做的使用self-referential association

相關問題