diff options
author | Douwe Maan <douwe@gitlab.com> | 2017-08-15 08:06:37 +0000 |
---|---|---|
committer | Jose Ivan Vargas <jvargas@gitlab.com> | 2017-08-18 12:06:39 -0500 |
commit | f3da423a2107836fadbff7957679652f289c92ad (patch) | |
tree | 985fae8f41a2af129ef8871e9ca08eb32a3ce096 /app/models/member.rb | |
parent | 9af78141d030e70349f24449e2992f555c03cc34 (diff) | |
download | gitlab-ce-f3da423a2107836fadbff7957679652f289c92ad.tar.gz |
Merge branch '34533-speed-up-group-project-authorizations' into 'master'9-5-stable-prepare-RC6
Speed up Group#user_ids_for_project_authorizations
Closes #36182
See merge request !13508
Diffstat (limited to 'app/models/member.rb')
-rw-r--r-- | app/models/member.rb | 15 |
1 files changed, 13 insertions, 2 deletions
diff --git a/app/models/member.rb b/app/models/member.rb index dc9247bc9a0..17e343c84d8 100644 --- a/app/models/member.rb +++ b/app/models/member.rb @@ -41,9 +41,20 @@ class Member < ActiveRecord::Base is_external_invite = arel_table[:user_id].eq(nil).and(arel_table[:invite_token].not_eq(nil)) user_is_active = User.arel_table[:state].eq(:active) - includes(:user).references(:users) - .where(is_external_invite.or(user_is_active)) + user_ok = Arel::Nodes::Grouping.new(is_external_invite).or(user_is_active) + + left_join_users + .where(user_ok) + .where(requested_at: nil) + .reorder(nil) + end + + # Like active, but without invites. For when a User is required. + scope :active_without_invites, -> do + left_join_users + .where(users: { state: 'active' }) .where(requested_at: nil) + .reorder(nil) end scope :invite, -> { where.not(invite_token: nil) } |