下記のアソシエーションのモデルがある場合、ループ処理の中でarticle_commentsテーブルをwhereメソッドで絞り込むと、キャッシュを使わずにクエリを発行し、N+1問題が発生します。
お手数ですが、クエリの発行回数を抑えたい場合、どのような処理をすればよろしいでしょうか。
試した内容としては、FavloriteFeedにincludesメソッドやeager_loadメソッドを使用しキャッシュを使用しましたが、クエリの発行回数は減りませんでした。
class Article < ApplicationRecord has_many :favorite_feeds has_many :article_comments end
class User < ApplicationRecord has_many :article_comments end
class FavoriteFeed < ApplicationRecord belong_to :article belong_to :user end
class ArticleComment < ApplicationRecord belong_to :article belong_to :user end
Nクエリが発行される処理
FavoriteFeed.eager_load(article: :article_comments).each do |feed| puts "記事名: #{feed.name}" article.article_comments.where(user_id: [1, 2]).each do |article_comment| puts "記事のコメント: #{article_comment.comment}" end end
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/11/23 04:31