我在Rails 2.x中有Worker,Manager和Title模型。还有一个JOIN表只有worker_id,manager_id和title_id(没有明确的模型)。由于这个JOIN表(并没有它的模型),我假设我必须有以下内容:
在工人模型中,我有:
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 :(得分:0)
你可以移动manager_id(因为,一个Worker只能在Manager上),并且拥有这样的关系
class Manager < AR::Base
has_many :workers
end
然后,在工人所属的经理。
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