2017-08-04 47 views
-1

我期待创造的Rails 5以下型号:如何在加入的Rails 5中创建3个模型?

Industry 
Department 
JobTitle 

示例数据:

Industry: Technology, Healthcare, Other 
Department: Admin, Customer Support 
JobTitle: Account Manager, Accountant 

行业是最高级别,部门可以属于一个或更多的行业和职位名称可以属于一个或多个部门。

我在Rails中创建了上述三个模型,我没有的是给定一个行业和部门,我如何获得所有JobTitles?

我应该如何存储这种关系,然后如何查询以获取它?

我应该创建像3表连接模式:

IndustriesDepartmentsJobTitles 
id | industry_id | department_id | job_title_id 

那是要做到这一点的正确方法?如果是这样,那么我将如何查询job_titles给出一个industry_id & department_id?

感谢

+1

为什么不使用两个连接的表?我猜你在行业部门和部门职位表中都有HABTM关系,如果这是真的,你可以很容易地访问你的模型,例如:'job_titles = Industry.first.departments.select do | dep | dep.job_titles end'(这是一个粗略的例子)。 – Lun4i

+1

只要考虑当你添加'belongs_to','has_many'或'has_and_belongs_to_many',它就会添加访问和修改关联对象的方法,如:my_industry.departments(其中my_industry是Industry类对象)。 – Lun4i

回答

2

如果使用两种关系模型一个表,你会最终有很多重复的列。它应该可以分成2个表格。

This rails docs sectionthis对使用​​HABTMhas_many through:来选择表达这种多对多关系的方式有很好的解释。

一个行业可以有多个部门,反之亦然。

class Industry << ApplicationRecord 
    has_and_belongs_to_many :departments 
end 

# Relationship table needed: departments_industries 

class Department << ApplicationRecord 
    has_and_belongs_to_many :industries 
    has_and_belongs_to_many :job_titles 
end 

# Relationship table needed: departments_job_titles 

class JobTitle << ApplicationRecord 
    has_and_belongs_to_many :departments 
end 

迁移样本:

create_table :industries do |t| 
    t.string :name 
    t.timestamps 
end 

create_table :departments do |t| 
    t.string :name 
    t.timestamps 
end 

create_table :job_titles do |t| 
    t.string :name 
    t.timestamps 
end 

create_table :departments_industries do |t| 
    t.belongs_to :industry, index: true 
    t.belongs_to :department, index: true 
    # .. 
    t.timestamps 
end 

create_table :departments_job_titles do |t| 
    t.belongs_to :department, index: true 
    t.belongs_to :job_title, index: true 
    # .. 
    t.timestamps 
end 

查询:

tech = Industry.find_by(name: 'Technology') 
department = tech.departments.find_by(name: 'Admin') 
department.job_titles 
+0

然后我如何创建DepartmentsIndustries记录?我是否需要在Rails DepartmentsIndustries中创建模型? – AnApprentice

+1

不,你只能创建中间模型,如果你使用'has_many:通过' –

+1

至于分配部门/行业,你可以做一些像tech.departments.build(名称:'部门名称')甚至tech.departments = [department_1,department_2]'等 –

相关问题