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 | 92 | def members |
93 | 93 | scopes = plugins.dispatch_scopes(:organization_members, self) |
94 | 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 | 104 | end |
97 | 105 | |
98 | 106 | def members_count | ... | ... |
test/unit/profile_test.rb
... | ... | @@ -1807,7 +1807,7 @@ class ProfileTest < ActiveSupport::TestCase |
1807 | 1807 | assert_includes original_community.members, original_member |
1808 | 1808 | assert_includes original_community.members, plugin1_member |
1809 | 1809 | assert_includes original_community.members, plugin2_member |
1810 | - assert 3, original_community.members.count | |
1810 | + assert_equal 3, original_community.members.count | |
1811 | 1811 | end |
1812 | 1812 | |
1813 | 1813 | private | ... | ... |