This is part of the Semicolon&Sons Code Diary - consisting of lessons learned on the job. You're in the dumb-mistakes-and-gotchas category.
Last Updated: 2025-10-30
The files on a product page were displayed in a bogus order. The order was insane, with 2012 appearing before 2008 and 2011 appearing after.
The sort code was:
@notes_files.
  group_by(&:author).
  sort_by {|group| group[1].max_by(&:created_at) }.
  each.with_index do |notes_file_author_file_group, index|
     ...
  end
The issue was that each group[1].max_by(&:created_at) returned a NotesFile
instance, instead of a date (as I expected), and NotesFile - a complex
database-backed object - are very odd sort keys indeed. Therefore I got a bogus
sort. 
The fix was to do group[1].map(&:created_at).max and ensure I was sorting on
actual timestamps. (Actually, as I will talk about in another diary entry, it
would have been better to do all the sorting in the DB instead using an order
clause).
When doing a sort, ensure the entity is properly comparable. Ruby will try to sort ANYTHING and not complain (instead just quietly give bogus results)