diff --git a/app/models/user.rb b/app/models/user.rb index 96db9c8ce24..49888a00585 100644 --- a/app/models/user.rb +++ b/app/models/user.rb @@ -240,6 +240,7 @@ class User < ActiveRecord::Base def self.order_by_sortable_name(options = {}) order_clause = clause = sortable_name_order_by_clause order_clause = "#{clause} DESC" if options[:direction] == :descending + order_clause += ",users.id" scope = self.order(order_clause) if scope.select_values.empty? scope = scope.select(self.arel_table[Arel.star]) diff --git a/spec/models/user_spec.rb b/spec/models/user_spec.rb index d9aa10c420e..8e0f7377499 100644 --- a/spec/models/user_spec.rb +++ b/spec/models/user_spec.rb @@ -2123,6 +2123,11 @@ describe User do expect(User.sortable_name_order_by_clause).not_to match(/'es'/) expect(User.sortable_name_order_by_clause).to match(/'root'/) end + + it "breaks ties with user id" do + ids = 5.times.map { User.create!(:name => "Abcde").id }.sort + expect(User.order_by_sortable_name.where(id: ids).map(&:id)).to eq(ids) + end end describe "quota" do