summaryrefslogtreecommitdiffstats
path: root/app
diff options
context:
space:
mode:
authorEric Davis <edavis@littlestreamsoftware.com>2010-09-10 19:53:57 +0000
committerEric Davis <edavis@littlestreamsoftware.com>2010-09-10 19:53:57 +0000
commitd36700eeee57dcd5da0078bf891b8186d30eb382 (patch)
treeb5b959ae4240cf7d2814aaecc3156be655f68097 /app
parent41f8d043eb29452ff11baf5e5286cd907cda742e (diff)
downloadredmine-d36700eeee57dcd5da0078bf891b8186d30eb382.tar.gz
redmine-d36700eeee57dcd5da0078bf891b8186d30eb382.zip
Refactor: replace chained finders with an inject. Should handle edge cases better.
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@4079 e93f8b46-1217-0410-a6f0-8f06a7374b81
Diffstat (limited to 'app')
-rw-r--r--app/models/query.rb11
1 files changed, 8 insertions, 3 deletions
diff --git a/app/models/query.rb b/app/models/query.rb
index 4b2cc7557..59131afcd 100644
--- a/app/models/query.rb
+++ b/app/models/query.rb
@@ -441,16 +441,21 @@ class Query < ActiveRecord::Base
elsif field == "member_of_group" # named field
if operator == '*' # Any group
groups = Group.all
- members_of_groups = groups.collect(&:user_ids).flatten.compact.collect(&:to_s)
operator = '=' # Override the operator since we want to find by assigned_to
elsif operator == "!*"
groups = Group.all
- members_of_groups = groups.collect(&:user_ids).flatten.compact.collect(&:to_s)
operator = '!' # Override the operator since we want to find by assigned_to
else
groups = Group.find_all_by_id(v)
- members_of_groups = groups.collect(&:user_ids).flatten.compact.collect(&:to_s)
end
+ groups ||= []
+
+ members_of_groups = groups.inject([]) {|user_ids, group|
+ if group && group.user_ids.present?
+ user_ids << group.user_ids
+ end
+ user_ids.flatten.uniq.compact
+ }.sort.collect(&:to_s)
sql << '(' + sql_for_field("assigned_to_id", operator, members_of_groups, Issue.table_name, "assigned_to_id", false) + ')'