From b46ff56e52c6baded5c8b4edb90be31d31267da9 Mon Sep 17 00:00:00 2001 From: David Kim <dkim@gitlab.com> Date: Thu, 8 Sep 2022 16:21:46 +0930 Subject: [PATCH] Use approvals only to check if the user approved We don't need additional join to answer that question --- app/models/concerns/approvable.rb | 2 +- ee/app/models/approval_state.rb | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/app/models/concerns/approvable.rb b/app/models/concerns/approvable.rb index f18a3877fe0c..1566c53217d0 100644 --- a/app/models/concerns/approvable.rb +++ b/app/models/concerns/approvable.rb @@ -47,7 +47,7 @@ def select_from_union(relations) def approved_by?(user) return false unless user - approved_by_users.include?(user) + approvals.where(user: user).any? end def can_be_approved_by?(user) diff --git a/ee/app/models/approval_state.rb b/ee/app/models/approval_state.rb index a095e128905d..c28ab346c74e 100644 --- a/ee/app/models/approval_state.rb +++ b/ee/app/models/approval_state.rb @@ -10,7 +10,7 @@ class ApprovalState attr_reader :merge_request, :project - def_delegators :@merge_request, :merge_status, :approved_by_users, :approvals, :approval_feature_available? + def_delegators :@merge_request, :merge_status, :approved_by_users, :approvals, :approval_feature_available?, :approved_by? alias_method :approved_approvers, :approved_by_users def initialize(merge_request, target_branch: nil) @@ -149,7 +149,7 @@ def can_be_approved_by?(user) return true if unactioned_approvers.include?(user) # Users can only approve once. - return false if approvals.where(user: user).any? + return false if approved_by?(user) # At this point, follow self-approval rules. Otherwise authors must # have been in the list of unactioned_approvers to have been approved. return false if !authors_can_approve? && merge_request.author == user -- GitLab