2

私は、次のスキーマがあります。私は、リレーションシップ・レコードを作成したい場合はRails 5 has_and_belongs_to_manyを指定すると、結合レコードを作成する方法は?

class Industry << ApplicationRecord 
    has_and_belongs_to_many :departments 
end 

# Relationship table: departments_industries 

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

# Relationship table: departments_job_titles 

class JobTitle << ApplicationRecord 
    has_and_belongs_to_many :departments 
end 

を:

department.job_titles.find_or_create_by(title: title) 

上記は、上記のクエリは、レコードの作成した場合のみdepartments_job_titlesでレコードを作成するに終わるん。 JobTitleがすでに存在する場合、Railsはdepartments_job_titlesに関係レコードを作成していません。

にはどうすれば更新できます

department.job_titles.find_or_create_by(title: title) 

をJobTitleレコードが見つからないか作成されたいずれかのとき、常にdepartments_job_titlesで関係レコードを作成するには?

おかげで

+2

(https://github.com/bbatsov/rails-style-guide#activerecord CTRL + F "has_and_belongs_to_manyアソシエーション")、それが推奨されますHABTMの代わりに:has_many:things、::join_records'を使用する(引用符)* "結合モデルの追加属性と検証を許可する" *( 'favorite'、' position'属性など) – MrYoshiji

答えて

2

これを試してみてください:Railsのスタイルガイドで

department.job_titles << JobTitle.find_or_create_by(title: title) 
関連する問題