summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGo MAEDA <maeda@farend.jp>2025-04-27 08:27:08 +0000
committerGo MAEDA <maeda@farend.jp>2025-04-27 08:27:08 +0000
commit9052d4d05bb76c8ac6bf9c94a7a0289f78611e5d (patch)
tree7b281c7c0ae1bfb916bbbe6e8a53c20bf0868ee1
parenta29d511580506c4dee3bea153494984c01f09d96 (diff)
downloadredmine-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.rb4
-rw-r--r--app/models/principal.rb2
-rw-r--r--app/models/user.rb1
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