From: Eric Davis Date: Fri, 10 Sep 2010 19:53:57 +0000 (+0000) Subject: Refactor: replace chained finders with an inject. Should handle edge cases better. X-Git-Tag: 1.1.0~379 X-Git-Url: https://source.dussan.org/?a=commitdiff_plain;h=d36700eeee57dcd5da0078bf891b8186d30eb382;p=redmine.git 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 --- 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) + ')'