PERF: Remove n+1 in user directory (#13501)
This commit is contained in:
parent
fa4a462517
commit
6e1fa7b082
|
@ -9,7 +9,7 @@ class DirectoryItemsController < ApplicationController
|
||||||
period = params.require(:period)
|
period = params.require(:period)
|
||||||
period_type = DirectoryItem.period_types[period.to_sym]
|
period_type = DirectoryItem.period_types[period.to_sym]
|
||||||
raise Discourse::InvalidAccess.new(:period_type) unless period_type
|
raise Discourse::InvalidAccess.new(:period_type) unless period_type
|
||||||
result = DirectoryItem.where(period_type: period_type).includes(:user)
|
result = DirectoryItem.where(period_type: period_type).includes(user: :user_custom_fields)
|
||||||
|
|
||||||
if params[:group]
|
if params[:group]
|
||||||
group = Group.find_by(name: params[:group])
|
group = Group.find_by(name: params[:group])
|
||||||
|
@ -96,7 +96,12 @@ class DirectoryItemsController < ApplicationController
|
||||||
|
|
||||||
serializer_opts = {}
|
serializer_opts = {}
|
||||||
if params[:user_field_ids]
|
if params[:user_field_ids]
|
||||||
serializer_opts[:user_field_ids] = params[:user_field_ids]&.split("|")&.map(&:to_i)
|
serializer_opts[:user_custom_field_map] = {}
|
||||||
|
|
||||||
|
user_field_ids = params[:user_field_ids]&.split("|")&.map(&:to_i)
|
||||||
|
user_field_ids.each do |user_field_id|
|
||||||
|
serializer_opts[:user_custom_field_map]["#{User::USER_FIELD_PREFIX}#{user_field_id}"] = user_field_id
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
if params[:plugin_column_ids]
|
if params[:plugin_column_ids]
|
||||||
|
|
|
@ -8,11 +8,20 @@ class DirectoryItemSerializer < ApplicationSerializer
|
||||||
attributes :user_fields
|
attributes :user_fields
|
||||||
|
|
||||||
def user_fields
|
def user_fields
|
||||||
object.user_fields(@options[:user_field_ids])
|
fields = {}
|
||||||
|
|
||||||
|
object.user_custom_fields.each do |cuf|
|
||||||
|
user_field_id = @options[:user_custom_field_map][cuf.name]
|
||||||
|
if user_field_id
|
||||||
|
fields[user_field_id] = cuf.value
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
fields
|
||||||
end
|
end
|
||||||
|
|
||||||
def include_user_fields?
|
def include_user_fields?
|
||||||
user_fields.present?
|
@options[:user_custom_field_map].present?
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue