diff options
author | Go MAEDA <maeda@farend.jp> | 2025-04-27 08:27:08 +0000 |
---|---|---|
committer | Go MAEDA <maeda@farend.jp> | 2025-04-27 08:27:08 +0000 |
commit | 9052d4d05bb76c8ac6bf9c94a7a0289f78611e5d (patch) | |
tree | 7b281c7c0ae1bfb916bbbe6e8a53c20bf0868ee1 | |
parent | a29d511580506c4dee3bea153494984c01f09d96 (diff) | |
download | redmine-9052d4d05bb76c8ac6bf9c94a7a0289f78611e5d.tar.gz redmine-9052d4d05bb76c8ac6bf9c94a7a0289f78611e5d.zip |
Optimize watchers list rendering by eager loading email addresses (#42589).
Patch by Go MAEDA (user:maeda).
git-svn-id: https://svn.redmine.org/redmine/trunk@23722 e93f8b46-1217-0410-a6f0-8f06a7374b81
-rw-r--r-- | app/helpers/watchers_helper.rb | 4 | ||||
-rw-r--r-- | app/models/principal.rb | 2 | ||||
-rw-r--r-- | app/models/user.rb | 1 |
3 files changed, 5 insertions, 2 deletions
diff --git a/app/helpers/watchers_helper.rb b/app/helpers/watchers_helper.rb index 6e6366846..bfed8adf2 100644 --- a/app/helpers/watchers_helper.rb +++ b/app/helpers/watchers_helper.rb @@ -48,7 +48,9 @@ module WatchersHelper def watchers_list(object) remove_allowed = User.current.allowed_to?(:"delete_#{object.class.name.underscore}_watchers", object.project) content = ''.html_safe - lis = object.watcher_users.sorted.collect do |user| + scope = object.watcher_users + scope = scope.includes(:email_address) if Setting.gravatar_enabled? + lis = scope.sorted.collect do |user| s = ''.html_safe s << avatar(user, :size => "16").to_s if user.is_a?(User) s << link_to_principal(user, class: user.class.to_s.downcase) diff --git a/app/models/principal.rb b/app/models/principal.rb index 77f599c73..86c4edb84 100644 --- a/app/models/principal.rb +++ b/app/models/principal.rb @@ -35,6 +35,8 @@ class Principal < ApplicationRecord :foreign_key => 'user_id' has_many :projects, :through => :memberships has_many :issue_categories, :foreign_key => 'assigned_to_id', :dependent => :nullify + # Always returns nil for groups + has_one :email_address, lambda {where :is_default => true}, :autosave => true, :foreign_key => 'user_id' validate :validate_status diff --git a/app/models/user.rb b/app/models/user.rb index 51ebf25f6..4b6387ae5 100644 --- a/app/models/user.rb +++ b/app/models/user.rb @@ -91,7 +91,6 @@ class User < Principal has_one :preference, :dependent => :destroy, :class_name => 'UserPreference' has_one :atom_token, lambda {where "#{table.name}.action='feeds'"}, :class_name => 'Token' has_one :api_token, lambda {where "#{table.name}.action='api'"}, :class_name => 'Token' - has_one :email_address, lambda {where :is_default => true}, :autosave => true has_many :email_addresses, :dependent => :delete_all belongs_to :auth_source |