2012-04-02 2 views
2

나는 3 개 모델 ...여러 모델과 테이블 스키마 조언

포스트, Logo_Category 및 로고

5 테이블

게시물, 로고, logo_categories, logos_posts이있는 경우 and logos_categories_posts

게시물은 모든 숫자를 가질 수 있습니다. logo_categories의 수에 관계없이 로고를 표시합니다. 나는 HABTM로 라인을 시작했지만, 나는 내 스키마 측면에서 잘못된 경로를 선택했을지도 모른다.

누구나 이러한 모델을 연결하는 가장 좋은 방법은 무엇인지 알 수 있습니까?

건배

편집

미안 얘들 아, 나는이 문제를하지만 ... 지금은 다음에 내 연결을 변경 한 바울 제안과 일치에서

를 해결했다고 생각.

POST.erb

has_and_belongs_to_many :logos 
has_many :logo_categories, :through => :logos 

LOGO.erb

belongs_to :logo_category 
    has_and_belongs_to_many :posts 

LOGO_CATEGORY.erb

has_many :logos 
has_and_belongs_to_many :posts 

내 테이블이 지금 ...

게시물 (ID), 로고 (ID), logos_posts (ID, logo_id, logo_category_id), logo_categories (ID)는

내 포스트 _form로드 벌금과 로고 및 logo_categories의 모든 올바른로드됩니다 값 및 체크/체크하지 않음 (게시물 편집시).

새 로고를 확인하거나 기존 로고를 선택 취소하고 기록을 남길 수 있습니다. 그러나, logo_category를 변경하면 다음 오류가 발생합니다!

둘 이상의 다른 연결을 통해 으로 연결되기 때문에 'Post # logo_categories'연결을 수정할 수 없습니다.

아이디어가 있으십니까?테이블에 대한

+0

클래스 다이어그램을 스케치하십시오. 테이블을 단순화하기 위해 일대일 또는 일 대 일대의 관계를 찾으십시오. 내가 가지고있는 첫 번째 질문은 하나의 로고가 하나 이상의 카테고리를 가질 수 있는가하는 것입니다. – Paul

+0

포스트에는 많은 로고와 로고 _ 카테고리가있을 수 있습니다. 로고 카테고리에는 많은 로고가 있습니다. 로고에는 카테고리가 하나만있을 수 있습니다. – 3quid

답변

1

:

[posts] 1--n [post_logos] n--1 [logo] n--1 [logo_category] 
  • 각 포스트가 고유 post_id를 포스트 테이블에 한 행
  • 각 로고 는 고유 logo_id
  • 각각의 로고와 로고 테이블에 한 행이
  • 표 행 은 하나의 logo_category 행에 연결됩니다.
  • 로고가 에 게시물과 연결될 때마다 post_l에 행이 만들어집니다 ogos 테이블. 두 개의 외부 키 열 (post_id 및 logo_id)이 있습니다.

루비에서 각 Post 객체는 로고 객체 또는 배열을 가질 수 있습니다. 각 Logo 객체는 하나의 Logo_Category 객체 (하나의 Logo_Category 멤버 또는 변수가 있음)를 구성합니다.

+0

명확히하기 위해 두 개의 완전히 다른 테이블 (로고 및 logos_categories) 대신 logos_categories_posts를 사용하여 결합하는 것이 좋습니다 ... 로고에 logo_category_id 열을 추가 한 다음 logos_posts 테이블을 사용하여 조인해야합니다 (logos_posts가 아님). posts_logos, right?) – 3quid

+0

예, logos_categories_posts 테이블은 필요하지 않습니다. 로고는 최대 하나의 범주 만 가질 수 있지만 범주는 여러 개의 로고로 매핑 될 수 있으므로 로고 및 범주는 범주를 가리키는 로고 테이블의 외래 키 열을 사용하여 연관되어야합니다. (logos_posts 테이블의 이름은 중요하지 않습니다.) – Paul

+0

이상적. 폴 감사합니다. 나는 (매우) 유용하지만 내 담당자가 그것을 허용하지 않습니다 귀하의 게시물에 투표를 했어요! 당신의 도움을 주셔서 감사합니다. 최대한 빨리 시도해 보겠습니다. – 3quid

관련 문제