[Rails] 孫のテーブルまでegaer loadingする
初めて親から孫をegaer loadingしたのでメモ。 「users(親) - posts(子) - comments(孫)」といったテーブル構造で、親のレコードを取得しインスタンスに詰めた後、モデルの関連付けを利用して子(post)と孫(comment)のレコードを取得する時に、効率的なSQLが発行されるよう親レコードの取得の際にeager loadingでテーブルをjoinしておく。
# user.rb
class User < ActiveRecord::Base
has_many :posts
end
# post.rb
class Post < ActiveRecord::Base
belongs_to :user
has_many :comments
end
# comment.rb
class comment < ActiveRecord::Base
belongs_to :post
end
user = User.find(1).includes(posts: [:comments])
posts = user.posts
comments = user.posts.comments
発行されるSQL