データモデルで1対多の関係性を持たせるには
has_manyとbelongs_toをモデルに加える必要がある。
例えは部門と従業員の例で考えてみよう
department_id |
department_name |
1 |
営業 |
2 |
開発 |
3 |
人事 |
employee_id |
employee_name |
Department_id |
101 |
山田 |
1 |
102 |
鈴木 |
1 |
103 |
佐藤 |
2 |
この場合、部門(1)には複数の従業員(多)がいるので、
has_many :employees, belongs_to department とモデルに加える
ここまでは分かりやすい。
問題は多対多の関係だ。
従業員と部門の関係から発展させて考え、従業員が複数の部門に所属できるとする。
すると、テーブルは以下の通りとなる。
department_id |
department_name |
1 |
営業 |
2 |
開発 |
3 |
人事 |
employee_id |
employee_name |
101 |
山田 |
102 |
鈴木 |
103 |
佐藤 |
department_id |
employee_id |
101 |
1 |
101 |
2 |
102 |
1 |
103 |
2 |
103 |
3 |
この多(部門)対多(従業員)を管理するには部門と従業員モデルにhas_manyを追加し
中間テーブル(EmployeeDepartment)を介して関連づける必要がある。
class Department < ApplicationRecord
has_many :employee_departments
has_many :employees, through: :employee_departments
end
class Employee < ApplicationRecord
has_many :employee_departments
has_many :departments, through: :employee_departments
end
clas EmployeeDepartement < ApplicationRecord
belongs_to :employee
belongs_to :department
end
Discussion