解決

複数をソート(asc、descが混在)の場合は、 sort を使用する。

User.all.sort { |a,b| [b.created_at, a.id] <=> [a.created_at, b.id] }.last.id == User.order(created_at: :desc).order(id: :asc).last.id

note

# gender asc, name asc
p(dogs.sort do |a, b|
  [a[:gender], a[:name]] <=> [b[:gender], b[:name]]
end)

# gender desc, name asc
p(dogs.sort do |a, b|
  [b[:gender], a[:name]] <=> [a[:gender], b[:name]]
end)

# gender asc, name desc
p(dogs.sort do |a, b|
  [a[:gender], b[:name]] <=> [b[:gender], a[:name]]
end)

ruby - Sorting multiple values by ascending and descending - Stack Overflow

事象

複数をソートをする場合に sort_by を使用していた。

User.all.sort_by { |m| [m.created_at, m.id] }.reverse.last.id == User.order(created_at: :desc).order(id: :asc).last.id