From 135eaf8a5ec0e37b64adf10971384ee88abec580 Mon Sep 17 00:00:00 2001 From: Joe Buhlig Date: Thu, 20 Oct 2016 09:44:35 -0500 Subject: [PATCH] Clean up N+1 queries --- .../discourse_feature_voting/votes_controller.rb | 14 ++++---------- .../discourse/widgets/vote-count.js.es6 | 8 ++++---- plugin.rb | 14 ++++---------- 3 files changed, 12 insertions(+), 24 deletions(-) diff --git a/app/controllers/discourse_feature_voting/votes_controller.rb b/app/controllers/discourse_feature_voting/votes_controller.rb index c939844..1dfc6a9 100644 --- a/app/controllers/discourse_feature_voting/votes_controller.rb +++ b/app/controllers/discourse_feature_voting/votes_controller.rb @@ -93,19 +93,13 @@ module DiscourseFeatureVoting end def who_voted(topic) - users = [] - User.where(id: topic.who_voted).each do |user| - users.push(UserSerializer.new(user, scope: guardian, root: 'user')) - end - return users + users = User.find(UserCustomField.where(name: "votes", value: topic.id).pluck(:user_id)) + ActiveModel::ArraySerializer.new(users, scope: Guardian.new(User.find_by(id: params["user_id"])), each_serializer: UserSerializer) end def who_super_voted(topic) - users = [] - User.where(id: topic.who_voted).each do |user| - users.push(UserSerializer.new(user, scope: guardian, root: 'user')) - end - return users + users = User.find(UserCustomField.where(name: "super_votes", value: topic.id).pluck(:user_id)) + ActiveModel::ArraySerializer.new(users, scope: Guardian.new(User.find_by(id: params["user_id"])), each_serializer: UserSerializer) end end end diff --git a/assets/javascripts/discourse/widgets/vote-count.js.es6 b/assets/javascripts/discourse/widgets/vote-count.js.es6 index fd814c1..0fcb7d5 100644 --- a/assets/javascripts/discourse/widgets/vote-count.js.es6 +++ b/assets/javascripts/discourse/widgets/vote-count.js.es6 @@ -86,8 +86,8 @@ export default createWidget('vote-count', { }); function whoVotedAvatars(user) { - return { template: user.user.avatar_template, - username: user.user.username, - post_url: user.user.post_url, - url: Discourse.getURL('/users/') + user.user.username.toLowerCase() }; + return { template: user.avatar_template, + username: user.username, + post_url: user.post_url, + url: Discourse.getURL('/users/') + user.username.toLowerCase() }; } \ No newline at end of file diff --git a/plugin.rb b/plugin.rb index 1f1837e..59a8df2 100755 --- a/plugin.rb +++ b/plugin.rb @@ -67,19 +67,13 @@ after_initialize do end def who_voted - users = [] - User.where(id: object.topic.who_voted).each do |user| - users.push(UserSerializer.new(user, scope: scope, root: 'user')) - end - return users + users = User.find(UserCustomField.where(name: "votes", value: object.topic.id).pluck(:user_id)) + ActiveModel::ArraySerializer.new(users, scope: scope, each_serializer: UserSerializer) end def who_super_voted - users = [] - User.where(id: object.topic.who_super_voted).each do |user| - users.push(UserSerializer.new(user, scope: scope, root: 'user')) - end - return users + users = User.find(UserCustomField.where(name: "votes", value: object.topic.id).pluck(:user_id)) + ActiveModel::ArraySerializer.new(users, scope: scope, each_serializer: UserSerializer) end end