mirror of
https://github.com/codeninjasllc/discourse.git
synced 2024-11-23 23:58:31 -05:00
Merge pull request #1325 from ZogStriP/fix-n-plus-one-query-for-avatars
FIX: N+1 query for avatars
This commit is contained in:
commit
890d3d0f45
6 changed files with 15 additions and 16 deletions
|
@ -313,7 +313,7 @@ class UsersController < ApplicationController
|
||||||
|
|
||||||
results = UserSearch.search term, topic_id
|
results = UserSearch.search term, topic_id
|
||||||
|
|
||||||
render json: { users: results.as_json(only: [ :username, :name ],
|
render json: { users: results.as_json(only: [ :username, :name, :use_uploaded_avatar, :upload_avatar_template, :uploaded_avatar_id],
|
||||||
methods: :avatar_template) }
|
methods: :avatar_template) }
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
|
@ -301,15 +301,7 @@ class User < ActiveRecord::Base
|
||||||
user = User.select([:email, :use_uploaded_avatar, :uploaded_avatar_template, :uploaded_avatar_id])
|
user = User.select([:email, :use_uploaded_avatar, :uploaded_avatar_template, :uploaded_avatar_id])
|
||||||
.where(email: email.downcase)
|
.where(email: email.downcase)
|
||||||
.first
|
.first
|
||||||
if user.present?
|
user.avatar_template if user.present?
|
||||||
if SiteSetting.allow_uploaded_avatars? && user.use_uploaded_avatar
|
|
||||||
# the avatars might take a while to generate
|
|
||||||
# so return the url of the original image in the meantime
|
|
||||||
user.uploaded_avatar_template.present? ? user.uploaded_avatar_template : user.uploaded_avatar.url
|
|
||||||
else
|
|
||||||
User.gravatar_template(email)
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
end
|
||||||
|
|
||||||
def self.gravatar_template(email)
|
def self.gravatar_template(email)
|
||||||
|
@ -323,11 +315,17 @@ class User < ActiveRecord::Base
|
||||||
# - emails
|
# - emails
|
||||||
def small_avatar_url
|
def small_avatar_url
|
||||||
template = User.avatar_template(email)
|
template = User.avatar_template(email)
|
||||||
template.gsub(/\{size\}/, "60")
|
template.gsub("{size}", "60")
|
||||||
end
|
end
|
||||||
|
|
||||||
def avatar_template
|
def avatar_template
|
||||||
User.avatar_template(email)
|
if SiteSetting.allow_uploaded_avatars? && use_uploaded_avatar
|
||||||
|
# the avatars might take a while to generate
|
||||||
|
# so return the url of the original image in the meantime
|
||||||
|
uploaded_avatar_template.present? ? uploaded_avatar_template : uploaded_avatar.url
|
||||||
|
else
|
||||||
|
User.gravatar_template(email)
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
# Updates the denormalized view counts for all users
|
# Updates the denormalized view counts for all users
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
class UserSearch
|
class UserSearch
|
||||||
def self.search term, topic_id = nil
|
def self.search term, topic_id = nil
|
||||||
sql = User.sql_builder(
|
sql = User.sql_builder(
|
||||||
"select id, username, name, email from users u
|
"select id, username, name, email, use_uploaded_avatar, uploaded_avatar_template, uploaded_avatar_id from users u
|
||||||
/*left_join*/
|
/*left_join*/
|
||||||
/*where*/
|
/*where*/
|
||||||
/*order_by*/")
|
/*order_by*/")
|
||||||
|
|
|
@ -12,7 +12,9 @@ class AvatarLookup
|
||||||
private
|
private
|
||||||
|
|
||||||
def users
|
def users
|
||||||
@users ||= User.where(:id => @user_ids).select([:id, :email, :username]).inject({}) do |hash, user|
|
@users ||= User.where(:id => @user_ids)
|
||||||
|
.select([:id, :email, :username, :use_uploaded_avatar, :uploaded_avatar_template, :uploaded_avatar_id])
|
||||||
|
.inject({}) do |hash, user|
|
||||||
hash.merge({user.id => user})
|
hash.merge({user.id => user})
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -85,7 +85,7 @@ class LocalStore
|
||||||
end
|
end
|
||||||
|
|
||||||
def get_path_for_avatar(file, upload, size)
|
def get_path_for_avatar(file, upload, size)
|
||||||
relative_avatar_template(upload).gsub(/\{size\}/, size.to_s)
|
relative_avatar_template(upload).gsub("{size}", size.to_s)
|
||||||
end
|
end
|
||||||
|
|
||||||
def relative_avatar_template(upload)
|
def relative_avatar_template(upload)
|
||||||
|
|
|
@ -130,7 +130,6 @@ class TopicQuery
|
||||||
end
|
end
|
||||||
|
|
||||||
def list_topics_by(user)
|
def list_topics_by(user)
|
||||||
Rails.logger.info ">>> #{user.id}"
|
|
||||||
create_list(:user_topics) do |topics|
|
create_list(:user_topics) do |topics|
|
||||||
topics.where(user_id: user.id)
|
topics.where(user_id: user.id)
|
||||||
end
|
end
|
||||||
|
|
Loading…
Reference in a new issue