diff options
author | Grzegorz Bizon <grzegorz@gitlab.com> | 2016-05-06 11:48:03 +0000 |
---|---|---|
committer | Grzegorz Bizon <grzegorz@gitlab.com> | 2016-05-06 11:48:03 +0000 |
commit | e65b78c6f1a05b01dc9e6a2e7042cc530718a904 (patch) | |
tree | 50d946f484099ea31a3907b1dd6ff1d4216b0ed4 /app | |
parent | 45ef8d5edaf3904f44d850d97863bbc53e8c4a1f (diff) | |
parent | 0a38eac16e1d86d094c98c12a38702ffe88cd527 (diff) | |
download | gitlab-ce-e65b78c6f1a05b01dc9e6a2e7042cc530718a904.tar.gz |
Merge branch 'remove-unexpected-filtering' into 'master'
Use outer join for issues ordering by milestones due.
This MR contains an implementation for Solution 1 suggested in #14183
Ordering by Milestone due sooner/later ("milestone sort") filters issues without a milestone, which can let users feel like disappearing issues without a milestone.
See merge request !3872
Diffstat (limited to 'app')
-rw-r--r-- | app/models/concerns/issuable.rb | 5 |
1 files changed, 3 insertions, 2 deletions
diff --git a/app/models/concerns/issuable.rb b/app/models/concerns/issuable.rb index d5166e81474..2e4efc4e8d8 100644 --- a/app/models/concerns/issuable.rb +++ b/app/models/concerns/issuable.rb @@ -35,13 +35,14 @@ module Issuable scope :only_opened, -> { with_state(:opened) } scope :only_reopened, -> { with_state(:reopened) } scope :closed, -> { with_state(:closed) } - scope :order_milestone_due_desc, -> { joins(:milestone).reorder('milestones.due_date DESC, milestones.id DESC') } - scope :order_milestone_due_asc, -> { joins(:milestone).reorder('milestones.due_date ASC, milestones.id ASC') } + scope :order_milestone_due_desc, -> { outer_join_milestone.reorder('milestones.due_date IS NULL ASC, milestones.due_date DESC, milestones.id DESC') } + scope :order_milestone_due_asc, -> { outer_join_milestone.reorder('milestones.due_date IS NULL ASC, milestones.due_date ASC, milestones.id ASC') } scope :without_label, -> { joins("LEFT OUTER JOIN label_links ON label_links.target_type = '#{name}' AND label_links.target_id = #{table_name}.id").where(label_links: { id: nil }) } scope :join_project, -> { joins(:project) } scope :references_project, -> { references(:project) } scope :non_archived, -> { join_project.where(projects: { archived: false }) } + scope :outer_join_milestone, -> { joins("LEFT OUTER JOIN milestones ON milestones.id = #{table_name}.milestone_id") } delegate :name, :email, |