2017-08-04 69 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]'等 –

相關問題