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