2011-01-26 101 views
0

我在Rails 2.x中有Worker,Manager和Title模型。還有一個JOIN表只有worker_id,manager_id和title_id(沒有明確的模型)。正因爲如此JOIN表(並沒有爲它的模型),我想我必須具備以下條件:如果使用連接表,關係是否必須是HABTM?

在工人模式,我有:

Worker 
has_and_belongs_to_many :managers 
has_and_belongs_to_many :titles 

但是,在現實中,關係是工人只能有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

你說,一個工人只能有1名經理,但有多個頭銜。如果是這樣的話,你爲什麼試圖將這兩種類型的關係(具有不同的基數)放在同一個表中? – 2011-01-26 10:32:02

回答

0

可以移動的manager_id(因爲,工人只能有對管理器)和有這樣

的關係

然後,在工人belongs_to經理。

class Worker < AR::Base 
    belongs_to :manager 
end 

你需要有一個連接表,如「workers_titles」爲保持工人和標題

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

模型之間的關係:

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 2011-01-26 15:04:52

相關問題