summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGo MAEDA <maeda@farend.jp>2025-04-02 09:22:35 +0000
committerGo MAEDA <maeda@farend.jp>2025-04-02 09:22:35 +0000
commit508c1fd5481cc079dcfe59b8729d615ed345b91b (patch)
tree31b98e4a7b51067304779ab998ac513e4756faee
parentd52a63675e9db2ab94577f2a34d55910a1303b09 (diff)
downloadredmine-508c1fd5481cc079dcfe59b8729d615ed345b91b.tar.gz
redmine-508c1fd5481cc079dcfe59b8729d615ed345b91b.zip
Improve performance of `TimeEntry#assignable_users` by reducing SQL queries (#35927).
Patch by Go MAEDA (user:maeda). git-svn-id: https://svn.redmine.org/redmine/trunk@23595 e93f8b46-1217-0410-a6f0-8f06a7374b81
-rw-r--r--app/models/time_entry.rb7
1 files changed, 5 insertions, 2 deletions
diff --git a/app/models/time_entry.rb b/app/models/time_entry.rb
index 4a3a79987..f20958894 100644
--- a/app/models/time_entry.rb
+++ b/app/models/time_entry.rb
@@ -243,8 +243,11 @@ class TimeEntry < ApplicationRecord
def assignable_users
users = []
if project
- users = project.members.active.preload(:user)
- users = users.map(&:user).select{|u| u.allowed_to?(:log_time, project)}
+ user_ids =
+ project.members.active.preload(:roles).filter_map do |m|
+ m.roles.any? {|role| role.allowed_to?(:log_time)} ? m.user_id : nil
+ end.uniq
+ users = User.where(:id => user_ids).sorted.to_a
end
users << User.current if User.current.logged? && !users.include?(User.current)
users