From 499bb9f305e78d0e3488c2eee6328ce76af39920 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?R=C3=A9my=20Coutable?= Date: Fri, 13 May 2016 17:26:18 +0200 Subject: Improve Issuable.order_labels_priority MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Rémy Coutable --- app/models/label.rb | 25 ++++++------------------- 1 file changed, 6 insertions(+), 19 deletions(-) (limited to 'app/models/label.rb') diff --git a/app/models/label.rb b/app/models/label.rb index 4437ca393ed..7fd77880558 100644 --- a/app/models/label.rb +++ b/app/models/label.rb @@ -19,7 +19,6 @@ class Label < ActiveRecord::Base validates :color, color: true, allow_blank: false validates :project, presence: true, unless: Proc.new { |service| service.template? } - validates :priority, presence: false, default: false # Don't allow '?', '&', and ',' for label titles validates :title, @@ -32,21 +31,11 @@ class Label < ActiveRecord::Base default_scope { order(title: :asc) } scope :templates, -> { where(template: true) } - scope :prioritized, ->(value = true) { where(priority: value) } - - def self.high_priority(name, table_name, labels) - unfiltered = unscoped - .select("MIN(labels.priority)") - .joins("INNER JOIN label_links ON label_links.label_id = labels.id") - .where("label_links.target_type = '#{name}'") - .where("label_links.target_id = #{table_name}.id") - .where("labels.project_id = #{table_name}.project_id") - - if labels.empty? - unfiltered - else - unfiltered.where("labels.title NOT IN (?)", labels) - end + + def self.prioritized(bool = true) + query = bool ? where.not(priority: nil) : where(priority: nil) + + query.reorder(Gitlab::Database.nulls_last_order(:priority), :title) end alias_attribute :name, :title @@ -139,8 +128,6 @@ class Label < ActiveRecord::Base end def nillify_priority - unless self.priority.present? - self.priority = nil - end + self.priority = nil if priority.blank? end end -- cgit v1.2.1