RailsのActive Recordで多対多の関連を使う時の話。ここではClubとStudentの関係を例とする。 普通に書くと、こうなると思う。
class Club < ApplicationRecord has_many :club_students, dependent: :destroy has_many :students, through: :club_students end class Student < ApplicationRecord has_many :club_students, dependent: :destroy has_many :clubs, through: :club_students end
ただ、このようにも書ける。
class Club < ApplicationRecord has_many :club_students has_many :students, through: :club_students, dependent: :destroy end class Student < ApplicationRecord has_many :club_students has_many :clubs, through: :club_students, dependent: :destroy end
この書き方だとClubを削除した時に関連するStudentも削除されるのではないか?と思われそうだが、through
を使った場合は中間レコードのみ削除されるので、結果的に前者と同様の挙動となる。
どちらで書くかは好みの問題だろうが、個人的には後者の方が多対多の関連を1行で明示できるので、最近はこちらを使うことが多い。ただ、毎度心配になるのと、ググっても情報が出てこないため、備忘録として残しておく。