#throughオプションとは?
has_manyメソッドのthroughオプションは、モデルに多対多の関連を定義するときに利用します。
throughオプションを使用し、多対多のアソシエーションを定義する場合は、それぞれのモデルに以下のような記述をします。
app/models/tweet.rb
class Tweet < ApplicationRecord
has_many :tweet_tag_relations
has_many :tags, through: :tweet_tag_relations
end
app/models/tag.rb
class Tag < ApplicationRecord
has_many :tweet_tag_relations
has_many :tweets, through: :tweet_tag_relations
end
app/models/tweet_tag_relation.rb
class TweetTagRelation < ApplicationRecord
belongs_to :tweet
belongs_to :tag
end
多対多の関係にある2つのテーブルのモデルでは、has_manyメソッドによる1対多のアソシエーションを互いに定義するのと合わせて、throughオプションによって経由する中間テーブルを指定します。
一方、中間テーブルのモデルでは、belongs_toメソッドで多対多の関係にある2つのテーブルを指定します。