2017-03-26 1 views
0

현재 작은 프로젝트를 개발 중입니다. 분류 광고 응용 프로그램입니다.다른 속성을 가진 ActiveRecord 객체를 저장하고 나열하는 방법은 무엇입니까?

이 응용 프로그램의 경우 다음과 같은 요구 사항이 있습니다 : 우리는 각기 다른 정보를 저장할 범주 집합을 갖게됩니다. 예 : 차량용 분류 코드에는 엔진, 제조 년도, 마일리지, 설명 및 실제 상태 관련 광고는 분명히이 정보를 가지지 않을 것이지만 대신 다른 모든 카테고리에 대해 속성 유형, 가격, 연도, 객실 수 등을 저장해야합니다.

그래서 질문은 다음과 같습니다

1) 검색을 수행 할 때 모든 범주에서 광고를 가져 오기 단일 결과 페이지에이를 표시 : 내가 할 수 있도록이 문제를 해결하는 가장 좋은 방법 일 것입니다 무슨.

2) 각 카테고리에 해당하는 데이터를 저장하지만, 가장 일반적인 속성에서 추상으로, 내 데이터베이스 모델 나는 하나의 제품 모델을 가지고하는 것입니다 이것에 대해 생각 무엇

에 너무 많은 빈 열을 피하기 그것은이 모델이 다음 모델, 아마도 belongs_to category_attributes를 결정할 카테고리 모델에 속할 것입니다. 그렇다면 각 카테고리에 대한 속성 테이블이 필요하며 제품에 대해 선택된 카테고리에 따라 다음과 같은 것을 갖습니다.

"차량"has_one vehicles_attributes가있는 제품.

내가이 상황을

감사를 처리하는 '레일 방식'이 무엇인지 알고 싶습니다

.

답변

0

귀하의 접근 방식은 괜찮습니다. 범주 집합이 매우 정적이라면 제대로 작동합니다. 새 카테고리 및/또는 속성을 추가 할 때마다 변경이 필요합니다. 내가 필요로 할 때 한 번 나를 위해 일한

하나 개의 아이디어는 더 많은 유연성이었다 : 더 필요 즉 명백한 단점이

Product.create(category: Category.find_by(:name, "Vehicles"), 
       name: "M1 Abrams", 
       description: "..." 
       spec_attrs: { year: 1975, 
          transmission: "manual" 
          max_speed: 72 }) 
Product.create(category: Category.find_by(:name, "Estates"), 
       name: "Taj Mahal", 
       description: "..." 
       spec_attrs: { year: 1653, 
          rooms: 268, 
          country: "India", 
          city: "Agra" }) 

:

# Migration 
create_table :products do |t| 
    t.integer :category_id 
    t.string :name 
    t.string :description 
    t.[...] # maybe other common fields here 
    t.string :spec_attrs, limit: 1000 
    t.timestamps 
end 

# Model 
class Product 
    belongs_to :category 
    serialize :spec_attrs, Hash 
end 

이 설정이 사용자가 같은 다른 제품을 만들 수 있습니다 속성의 존재, 유형 및 값을 검증하기위한 노력 (프로그램으로해야 함), 더 자세한 설명 속성 등이있는 경우 spec_attrs의 길이를주의하십시오. 향후 필요할 것이 무엇인지 생각하고 결정하십시오.

관련 문제