From 2d64a22dd928be415e0afaa55e43abb9a73ce281 Mon Sep 17 00:00:00 2001 From: Jean-Philippe Lang Date: Sat, 25 Oct 2014 11:14:16 +0000 Subject: [PATCH] Makes Project#assignable_users return a scope that prevents 2*n queries. git-svn-id: http://svn.redmine.org/redmine/trunk@13509 e93f8b46-1217-0410-a6f0-8f06a7374b81 --- app/models/issue.rb | 2 +- app/models/project.rb | 12 +++++++----- 2 files changed, 8 insertions(+), 6 deletions(-) diff --git a/app/models/issue.rb b/app/models/issue.rb index 78854568a..22c09ab65 100644 --- a/app/models/issue.rb +++ b/app/models/issue.rb @@ -734,7 +734,7 @@ class Issue < ActiveRecord::Base # Users the issue can be assigned to def assignable_users - users = project.assignable_users + users = project.assignable_users.to_a users << author if author users << assigned_to if assigned_to users.uniq.sort diff --git a/app/models/project.rb b/app/models/project.rb index 029b12945..aec787284 100644 --- a/app/models/project.rb +++ b/app/models/project.rb @@ -504,15 +504,17 @@ class Project < ActiveRecord::Base Member.delete_all(['project_id = ?', id]) end - # Users/groups issues can be assigned to + # Return a Principal scope of users/groups issues can be assigned to def assignable_users types = ['User'] types << 'Group' if Setting.issue_group_assignment? - member_principals. - select {|m| types.include?(m.principal.type) && m.roles.detect(&:assignable?)}. - map(&:principal). - sort + @assignable_users ||= Principal. + active. + joins(:members => :roles). + where(:type => types, :members => {:project_id => id}, :roles => {:assignable => true}). + uniq. + sorted end # Returns the mail addresses of users that should be always notified on project events -- 2.39.5