Post

asc、descが混在したソートをしたい

解決

複数をソート(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
This post is licensed under CC BY 4.0 by the author.