2012-11-12 5 views
3

나는 제품을 표시하는 앱을 만들고 있습니다. 각 제품은 이름, 브랜드 등의 공통 정보가 포함 된 모델 (제품)입니다.보고있는 제품의 종류를 구분하기 위해 product_type (예 : 전화, TV, 소파 등)은 기본적으로 tinyint입니다. 필드 (예 : 1 = 전화, 2 = TV).레일스에 여러 옵션 필드를 저장하는 방법은 무엇입니까?

지금, 는 제품 _에 따라 각 제품은 다른 옵션을 가질 수는 제품이 추가 정보를 원하시면 관련된해야 전화의 경우 (무게처럼, 그것은 LTE가 않습니다, 그것은 등 전면 카메라가 않습니다) TV에는 화면 크기와 같은 정보가 있어야합니다.

내 질문에 대한 답변 : 제품에 따라이 추가 데이터를 제품에 추가하는 가장 좋은 방법은 무엇입니까? 제품에 따라이 추가 데이터를 추가하는 방법은 무엇입니까?

내가 별도의 모델을 추가 필드를 저장하는 것 필드가 PRODUCT_ID ProductOptions, option_type, option_value (VARCHAR)을 가지고 생각했다,하지만이 성능 & 검색 선택 사항입니다 있는지 확실하지 않습니다. 이 경우 검색은 지정된 기준 (예 : po = ProductOption.where(:option_type => "LTE", :option_value => "yes"))과 일치하는 모든 ProductOptions을 찾은 다음 Product.findAllIn(po)을 수행하여 실제 제품을 찾습니다.

아니면 Postgres와 함께 가서 HStore를 사용해야합니까? 검색 할 때 HStore가 효율적입니까?

아이디어가 있으십니까?

레일 초보자는 모든 코드는 이미 ProductType에서 찾고 있다면,이 Single-Table Inheritance을 실제로 다른 제품 유형을 정의 할 수 있습니다 의사 코드

답변

2

입니다. 어쨌든 코드 작성이 쉬울 것입니다. 이 경우 :

class Product < ActiveRecord::Base 
    # common functionality goes here 
end 

class Sofa < Product 
    # sofa specific functionality goes here 
end 

그런 다음 제품 테이블에 모든 옵션을 추가하는 듯했으나 다른 제품 유형에 대해 다른 attr_accessible, 검증 및 뷰를 가질 수 있습니다.

이 설정의 가장 중요한 부분은 '그냥 작동합니다'레일에 있기 때문에 제품 테이블에 type 열을 넣기 만하면됩니다. 또한, 당신이 그렇게 같은 모든 소파 찾을 수 있습니다 :

Sofa.all 

Product.all 

지금까지 데이터베이스 성능 등 같은 모든 모든 것을 잘, 당신은 널 (null) 분야의 상당수 될 겁니다 하지만 모든 속성은 (직렬화와 달리) 검색 가능하며 하나의 테이블에서만 쿼리하면됩니다. 그래서, 나는 이것이 내가 아는 다른 어떤 옵션보다 우월 할 것으로 기대한다.

더하기, 멋지고 객체 지향적입니다. :)

행운을 빌어 요 레일에 오신 것을 환영합니다!

관련 문제