query-analyzerの使用を開始しましたが、同一のクエリについて警告されています。
コンテキストとして、ページに 25 個の「投稿」を読み込んでおり、現在のユーザーは投稿に「スター」を付けることができます。
0.018 秒25 個の同一クエリ
SELECT SQL_NO_CACHE N AS one FROM 'stars' WHERE 'stars'.'post_id' = N AND 'stars'.'user_id' = N LIMIT N
これは User モデルのメソッドです。
def has_starred_post?(post)
return false if post.nil?
Star.where(post_id: post.id, user_id: self.id).exists?
end
クエリの数を減らしてこの警告を満たすにはどうすればよいですか?
アップデート:
Taryn East のヒントに従って、User
モデル メソッドを次のように更新しました。
def has_starred_post?(post)
return false if post.nil?
self.stars.where(post_id: post.id).exists?
# OR post.stars.where(:user_id => self.id).exists?
end
これにより、ユーザーに属する星を関連付け/キャッシュすることができますがwhere
、それらの星のいずれかが投稿に属するかどうかを確認するために使用する必要があります。右?