-1

Rails 5に3つのモデルを作成するにはどうすればいいですか?私はRailsの5で、次のモデルを作成しているよ

Industry 
Department 
JobTitle 

例データ:業界が最高レベルである

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

、部門は、一つ以上の業種や職種に属することができます1つ以上の部門に所属することができます。

私は上記の3つのモデルをRailsで作成しましたが、私は持っていないのですが、業界と部門を考えれば、どのようにJobTitlesをすべて入手できますか?

この関係をどのように保存する必要がありますか。それはそれを行うには正しい方法だろう

IndustriesDepartmentsJobTitles 
id | industry_id | department_id | job_title_id 

は、私のような3台の参加モデルを作成する必要がありますか?もしそうなら、私はどのようにしてjob_titlesに対してindustry_id & department_idを与えるのでしょうか?あなたは両方の関係モデルの1台を使用する場合は

おかげ

+1

なぜ2がテーブルを結合するでしょうか? Industry-DepartmentとDepartment-JobTitle Tablesの両方で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 sectionおよびthisは、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レコードを作成するにはどうすればよいですか? DepartmentsIndustriesのレールにモデルを作成する必要がありますか? – AnApprentice

+1

いいえ、あなたは 'has_many:through'を使用する場合にのみ中間モデルを作成します –

+1

部門/業種の割り当てに関しては、' tech.departments.build(name: 'department name') 'や' tech.departments = [department_1、department_2] 'など –

関連する問題