0

저는 Rails 2.x에서 Worker, Manager 및 Title 모델을 보유하고 있습니다. worker_id, manager_id 및 title_id 만있는 JOIN 테이블도 있습니다 (이에 대한 명시 적 모델 없음). 이 때문에 테이블 (및 그것을위한 모델을 가지고 있지)에 가입, 나는 다음과 같은 가지고 있다고 가정 : 현실에서, 관계,조인 테이블을 사용하는 경우 관계가 HABTM 여야합니까?

Worker 
has_and_belongs_to_many :managers 
has_and_belongs_to_many :titles 

그러나 : 작업자 모델에서

, 내가 가진 Worker는 Manager가 1 명이지만 많은 타이틀을 보유 할 수 있습니다. 또한 많은 근로자들이 동일한 관리자를 가지고 있습니다.

Worker | Title | Manager 
Tom | A  | M1 
Tom | B  | M1 
Bob | A  | M2 
Pam | C  | M1 

는 "올바른"위의 작업자 모델을인가 :

일부 샘플 데이터의 관계를 설명하기 위해? 새로운 노동자를 작성 (모든 관계), 내가 할 : 나는이 작업을 수행 할 때, 나는 내 데이터베이스에서 다음을 얻을

worker = Worker.new("A") 
title = "B" 
manager = "C" 
worker.titles << title 
worker.managers << manager 
worker.save 

: 내가 좋아하는 것

Worker | Title | Manager 
A  | B  | null 
A  | null | C 

이 얻을 :

Worker | Title | Manager 
A  | B  | C 
+0

당신은 작업자 만이 할 수있는 말 :

class Worker < AR::Base belongs_to :manager end 

당신은 노동자와 제목

create_table "workers_titles", :id => false do |t| t.column "worker_id", :integer, :null => false t.column "title_id", :integer, :null => false end 

모델 사이의 관계를 유지하기위한 "는 workers_titles"같은 테이블에 가입이 필요합니다 관리자는 1 명이나 여러 명이 있습니다. 그렇다면 왜 서로 다른 카디널리티가있는이 두 유형의 관계를 같은 테이블에 넣으려고합니까? –

답변

0
당신의 (a 노동자는 관리자를 가질 수 있기 때문에)를 MANAGER_ID 이동이

같은 관계를 가질 수

그런 다음 작업자가 Manager에 속합니다.

class Worker < AR::Base 
    has_and_belongs_to_many :titles 
end 

class Title < AR::Base 
    has_and_belongs_to_many :workers 
end 
+0

그런 다음 위에서 worker_save를 수행하면 JOIN 테이블에 모두 올바르게 기록됩니까? – qali

관련 문제