【发布时间】:2016-07-11 00:39:42
【问题描述】:
我已经开始使用query-analyzer,它会警告我有关相同的查询。
就上下文而言,我正在页面上加载 25 个“帖子”,当前用户可以“加星标”一个帖子:
0.018s 25 个相同的查询
SELECT SQL_NO_CACHE N AS one FROM 'stars' WHERE 'stars'.'post_id' = N AND 'stars'.'user_id' = N LIMIT N
这是用户模型中的方法:
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 来检查这些星星是否属于帖子。对吧?
【问题讨论】:
标签: mysql ruby-on-rails ruby-on-rails-3 query-analyzer