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
This commit is contained in:
Eric Davis 2010-09-10 19:53:57 +00:00
parent 41f8d043eb
commit d36700eeee
1 changed files with 8 additions and 3 deletions

View File

@ -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) + ')'