2014-06-08 4 views
5

색상, 크기, 수량 및 가격이 같은 동일한 제품의 모델을 디자인하는 방법.온라인 쇼핑몰 제품의 더 좋은 모델 디자인

여기 내 현재의 모델 방식이야,

Product 
* Name 
* Price 
* Color 
* Quantity 
* Size 

어떻게 같은 쇼핑 섹션에서 다른 속성과 동일한 제품을 보여? 이 페이지를 방문 할 때, 당신은 COBBLE HILL TEE

내가 다른 색상 및 사이즈로 COBBLE HILL TEE 다른 달라야 생각 구입하는 의미

, 내가 예를 들어는 A & F 쇼핑 페이지를 보자 제품 모델의 제품 인스턴스, 맞습니까?

등이 다음과 같은 세 가지 경우가 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 인 경우 동일한 쇼핑 페이지에 모아야합니까? 죄송합니다

불쌍한 내 영어 나 소프트웨어의 modularity 사랑

enter image description here

+0

당신을' 현재 모델 스키마'완벽하다. 그것과 함께 가라. – Pavan

답변

6

내 질문에 설명하고 그에 따라 모델을 생성하기 위해. 난 당신이 생각 혜택을 얻을 것입니다 생각, 그래서 나는 당신을 위해 그것을 설명 할 것 :


모델

내가 모델을 확장하기 위해 모델을 유지하려면 - 그래서 당신은 1,000,000의를 추가 할 수 있습니다 항목의, 그리고 여전히 올바른 방법으로 작동합니다.

이렇게하려면 "사일로"데이터베이스가 있어야합니다 (올바른 용어인지 확실하지 않습니다). 그 다음에 "참조"모델이 있습니다.

"silo"데이터베이스/모델은 기본적으로 정적 데이터 (예 : products 또는 users)를 저장합니다. 참조 데이터베이스/모델은 silo 데이터베이스에 기본적으로 optionsproducts 또는 profileusers에 추가하는 것과 같은 범위를 제공합니다.귀하의 경우에는

, 나는 확실히 이런 짓을 했을까 :

#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`) 

:

enter image description here

이것은 당신이 전화를 할 수 있습니다 의미

당신이 productcolour 옵션을 호출하고 싶다면
#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 

주의 사항 내 코드와 주요주의의

하나는 내가 어떤 방식으로 구성되지 제공 한 options입니다. 특정 제품에 대한 size, colour, quantity있는 같이 제품 (옵션의 특정 set을하고 싶었다면, 당신은 당신이 원하는 경우에 할 수있는 Option 모델에 self-referential association을 사용하실 수 있습니다