やりたいこと
N+1 を解消するのには includes
や eager_load
、 preload
を使えばいいのは分かったしその違いも分かった。
でも、関連付けが取れない。
Author が books を has_many で book も reviews を has_many してるとき、普通に Author.books.reviews を取ったら N+1 になるじゃないですか。
だから以下のように書きたい。でも書けない。
Author.joins(:books).includes(:reviews)
みたいに書きたいんだけど、そうすると
ActiveRecord::AssociationNotFoundError: Association named 'reviews' was not found on Author; perhaps you misspelled it?
Did you mean? books
なんて感じのエラーになってしまう。
どう書けばいいんだろう?
正解
Author.includes(books: :reviews)
を見れば、複数の関連付けを取りたい場合なども分かります。