Rails modelで多対多を実現する

Ruby on Railsで多対多の関係を実現したい時がある
(例えばこのブログとタグ(Ruby on Rails, ansibleなど)の関係)
その場合は中間テーブルを作成し、多対多を実現したいモデルがちゅ間テーブルを通してお互いを複数持つようにする

class TechBlog < ActiveRecord::Base
  has_many :tech_blog_tags
  has_many :tags, through: :tech_blog_tags
end

class Tag < ActiveRecord::Base
  has_many :tech_blog_tags
  has_many :tech_blogs, through: :tech_blog_tags
end

class TechBlogTag < ActiveRecord::Base
  belongs_to :tech_blog
  belongs_to :tag
end
※最後のbelongs_toは単数系

このようにすると実現することができ、しかも中間テーブルを通してというのがそのまま設定になるような感じで直感的にもわかりやすい

TechBlogインスタンスはtagsメソッドを持ち、Tagインスタンスはtech_blogsメソッドを持つようになり、簡単にリレーションを確認できる
関連書籍
Back