2013-07-02 2 views
0

프로젝트 관련 질문이 있습니다. 내 응용 프로그램에서 내 모델을 설정하는 가장 효율적이고 논리적 인 방법을 결정하려고합니다. 벤더, 벤더 인벤토리 및 제품에 대한 모델링 관련 플레이어가 있습니다.데이터 모델링 구조 - 레일

재고 : 상점 ID 제품 및 관련 세부 사항 (가격, 이름, 브랜드, 세부 사항, 제품 코드)

공급 업체 : 다음은 각 항목이 어떤 방법으로 반환 할 수 있어야 무엇의 고장이다 스토어 ID, 위치, 이름

제품 : 가격, 이름, 브랜드, 세부 사항, 제품 코드

은 물론 제품과 재고 사이에이 제도의 중복이 많이있다. 내 문제는 공급 업체가 재고 목록에 비슷한 품목을 가지고있을 수 있지만 가격은 항상 다릅니다. 따라서 모델을 제품 코드별로 연관시킬 수는 없습니다. 대부분의 공급 업체가 동일한 제품을 보유하게 될 것이므로 모든 제품 정보로 매장 재고를 모델링한다면 많은 중복이 발생하지 않을까요? 또한 공급 업체를 위해 별도의 모델을 가질 필요가 없으며 모든 재고를 보유 할 수도 있지만 잃어 버릴 수도 있습니다. 도와주세요?! 미리 감사드립니다.

편집 :

나는 그것이 이상적 모르겠어요하지만 여기 내 모델 구조입니다.

class Vendor < ActiveRecord::Base 

    attr_accessible :name, :address 

    has_one  :inventory 
    has_many :products, through: :inventories 
end 

class Inventory < ActiveRecord::Base 

    has_many :products 
    belongs_to :vendor 
end 

class Product < ActiveRecord::Base 

    attr_accessible :upc, :brand, :product, :details, :price 

    has_many :inventories 
    has_many :vendors, through: :inventories 

end 
+0

일부 샘플 모델 코드를 붙여 넣으면 문제를 더 쉽게 볼 수 있습니다.즉, 공급 업체와 제품이 많은 관계가 있음을 이해하는 것으로부터 예. 이는 조인 테이블이 있다는 것을 의미합니다. 조인 테이블에 가격을 넣을 수 있으므로 중복 제품이없고 공급 업체마다 고유 한 가격이 부여됩니다. 상황에 따라 아마도 인벤토리를 없앨 수도 있고, 조인 테이블 인벤토리를 호출 할 수도 있습니다. 도움이되기를 바랍니다. – Saifis

+0

아직 샘플 코드가 없습니다. 나는 문제를 조금 더 개념적으로 이해할 수있을 때까지 아무 것도 생성하기를 기다리고 있었다. 조인 테이블에 대한 팁 주셔서 감사합니다. 몇 가지 검색을 수행하고 ActiveRecord 연관성에 대한 훌륭한 문서를 발견했습니다. 우리는 그것이 어디서 일어나는 지 알게 될 것입니다. – settheline

답변

1

내가 모델의 설정은 단지 예를 들어 특히 경우, 사용자의 특정 요구를 이해한다면 모르겠지만, 이름에서 판단, 여기 내 구현 될 것이다.

공급 업체는 주요 기업, 그것은, 조인 테이블의 재고를 통해 많은 제품을 소유 할

class Vendor < ActiveRecord::Base 

    attr_accessible :name, :address 

    has_many  :inventories 
    has_many :products, through: :inventories 
end 

그러나이 경우, 가격과 수량의 공급 업체 사이에 차이가해야 할 제품의 측면이 있습니다 독립적이며 각 제품 및 공급 업체와의 관계를 위해 만들어진 것이므로 가격과 수량과 같은 정보를 저장하는 데 이상적입니다 (조인 테이블에 저장할 수 있음).

class Inventory < ActiveRecord::Base 

    attr_accessible :product_id, :vendor_id, :price, :quantity 

    belongs_to :product 
    belongs_to :vendor 
end 

제품 경우에만 제품이 변경 될 마찬가지로 경우, 공급 업체가이를 처리에 관계없이 얼마나 보편적 인 것 특성을가집니다, 모든 공급 업체와 괜찮을 것 같네요.

이렇게하면 인벤토리의 가격과 수량을 설정하여보기에서 편집하는 것이 어려울 수 있습니다. 다시 말하지만, 그 일을 내 방식으로 제품을 중첩 된 필드를 사용하고 조인 테이블과 직접 상호 작용, 그리고하는 것, 여기

당신 형성에, simple_form 보석을 사용하여 몇 가지 빠른 부분 코드의

<%= f.simple_fields_for :inventories do |inventory_fields| %> 
     <%= render partial: "inventory_fields", locals: {f: inventory_fields }%> 
    <% end %> 
    <%= link_to_add_fields "Add", f, :f %> 

및 inventory_fields.html.erb에

<%= link_to "Remove", '#', class: "remove_fields btn btn-danger" %> 
    <%= f.input :product_id, collection: Product.all.somethingsomething, include_blank: false %> 
    <%= f.input :price %> 
    <%= f.input :quantity %> 

이제 드롭 다운에서 제품을 선택하고, 가격과 수량을 설정하고 당신이 무엇을 동적으로 필요로 할 수 있습니다.

+0

좋은 생각 Saifis. 모델은 진짜입니다. 가격은 공급 업체에 따라 다르지만 수량은 기록되지 않습니다. 재고 모델에 가격과 제품 ID가 포함될 수있는 방법을 이해하는 데 여전히 문제가 있습니다. 이는 인벤토리 클래스의 인스턴스가 가격 및 제품 ID를 반환한다는 것을 의미합니까? 해시 또는 배열에서? – settheline

+1

벤더가 연관된 모든 제품에 대해 인벤토리 인스턴스가 생성됩니다. 즉, 조인 테이블에서 작동하는 방식은 다 대다 관계입니다. 조인 테이블은 Product 및 Vendor에서 모든 복제를 흡수합니다. – Saifis

+0

수정, a가 많고 많은 관계에 속합니다. – Saifis