has_many :throughの使い方

よく言われるのは、多対多の関係で使うと言うものです。

ということで、多対多のモデル関係で試してみます。

例えば、「ユーザー(User)」が「ブログ(Blog)」を投稿し、ブログの「コメント(Comment)」をつけ、ユーザーに関連する「コメント」を取得する場合です。

railg g model User name:string
rails g model Blog body:text user:references
rails g model Comment body:text user:referenses blog:references 

Userモデル

class User < ActiveRecord::Base
  has_many :blogs
  has_many :comments, through: :blogs
end

Blogモデル

class Post < ActiveRecord::Base
  belongs_to :user
  has_many :comments
end

Commentモデル

class Comment < ActiveRecord::Base
  belongs_to :blog
  belongs_to :user
end

例えば、下記のようにしたらユーザーがコメントを取得できます。 コンソール

user = User.first
user.comments→関連する結果すべて出る