Commit 89997cec9b5ac0cf6b1adbce5144b052395cc5b4
1 parent
a997e8fc
Exists in
master
and in
29 other branches
rails3: fix use of Person.or_scope
There must be a better way to merge scopes (grouped with OR) in rails3
Showing
2 changed files
with
10 additions
and
2 deletions
Show diff stats
app/models/profile.rb
@@ -92,7 +92,15 @@ class Profile < ActiveRecord::Base | @@ -92,7 +92,15 @@ class Profile < ActiveRecord::Base | ||
92 | def members | 92 | def members |
93 | scopes = plugins.dispatch_scopes(:organization_members, self) | 93 | scopes = plugins.dispatch_scopes(:organization_members, self) |
94 | scopes << Person.members_of(self) | 94 | scopes << Person.members_of(self) |
95 | - scopes.size == 1 ? scopes.first : Person.or_scope(scopes) | 95 | + |
96 | + clauses = scopes.map do |relation| | ||
97 | + clause = relation.arel.where_clauses.map { |clause| "(#{clause})" }.join(' AND ') | ||
98 | + "(#{clause})" | ||
99 | + end.join(' OR ') | ||
100 | + | ||
101 | + joins = scopes.map { |relation| relation.joins_values }.flatten.uniq | ||
102 | + selects = scopes.map { |relation| relation.select_values }.flatten.uniq | ||
103 | + Person.select(selects).joins(joins).where(clauses) | ||
96 | end | 104 | end |
97 | 105 | ||
98 | def members_count | 106 | def members_count |
test/unit/profile_test.rb
@@ -1807,7 +1807,7 @@ class ProfileTest < ActiveSupport::TestCase | @@ -1807,7 +1807,7 @@ class ProfileTest < ActiveSupport::TestCase | ||
1807 | assert_includes original_community.members, original_member | 1807 | assert_includes original_community.members, original_member |
1808 | assert_includes original_community.members, plugin1_member | 1808 | assert_includes original_community.members, plugin1_member |
1809 | assert_includes original_community.members, plugin2_member | 1809 | assert_includes original_community.members, plugin2_member |
1810 | - assert 3, original_community.members.count | 1810 | + assert_equal 3, original_community.members.count |
1811 | end | 1811 | end |
1812 | 1812 | ||
1813 | private | 1813 | private |