結局は基本的なことなのですが、少し変わると途端にハマってしまう。
アソシエーションがうまくいかずに時間を溶かしてしまったので、そんな過去の自分といるかもしれない未来の誰かのために書き残しておきます。
テーブル構造
UserモデルとTagモデルの中間テーブルから派生させたTagSettingモデルを作りました。
ただ、今回の話にはUserモデルはあまり関係ありません。
また、この後「tag_usersとtag_settingsを別々にしなくていいんじゃないか?」という指摘を受けてテーブル構造を変えました。なので、例としては少々不適切かもしれませんがご容赦を。
モデルのアソシエーション
|
|
|
|
|
|
|
|
注意点
中間テーブルへのアソシエーションを追加する
has_many :tag_users
なしでhas_many :tag_settings, through: :tag_users
を定義することはできない。
また、中間テーブルへのアソシエーションの方を上に記述する必要がある。
単数形・複数形に注意する
has_many :tag_settings, through: :tag_users
has_many
のときは:through
も複数形
has_one :tag, through: :tag_user
has_one
のときは:through
も単数形