Ruby on Railsにて、各モデルで次のような関係をもっているとします。
ruby
1# User: ユーザ 2has_many :posts 3has_many :reactions 4 5# Post: 記事 6belongs_to :user 7has_many :reactions 8 9# Reaction: リアクション(記事に対してユーザがつける絵文字) 10belongs_to :user 11belongs_to :post
このとき、次のように「ユーザがリアクションをつけたかどうか」を取得すると、記事の数だけSELECT文が発行されてしまいます。
ruby
1# posts#index 2@posts = Post.all 3 4# posts/index.json.jbuilder 5json.partial! 'post', collection: @posts, as: :post 6 7# posts/_post.json.jbuilder 8json.is_reacted post.reactions.exists?(user: current_user)
これを joins
などで1つのクエリにまとめることはできますか?
根本的な考え方など指摘がありましたら回答いただければと思います。
追記:以下がイメージとして近いのですが、これをSQLで実現できれば考え方をご教示いただきたいです。
Avoid N+1?
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2017/07/31 10:42
2017/07/31 11:21 編集
2017/07/31 11:32
2017/08/04 01:26