В Ruby есть метод sort_by для Enumerables. Фантастика! Так что вы можете сделать что-то вроде
entries.sort_by { |l| l.project.name }
Это отсортировало бы кучу записей по именам их проектов. Как вы могли бы сделать так, чтобы в проектах с одинаковыми именами записи были отсортированы по времени?
Я бы предложил поместить столбец, по которому вы хотите отсортировать, в массив.
entries.sort_by { |l| [l.project.name, l.project.time] }
Это будет учитывать естественный порядок сортировки для каждого типа.
Вы можете использовать обычный метод сортировки, чтобы сделать это.
entries.sort do |a, b| comp = a.project.name <=> b.project.name comp.zero? ? (a.project.time <=> b.project.time) : comp end
Вернуть массив:
entries.sort_by { |l| [ l.project.name, l.project.time] }
это работает, потому что оператор <=> для массивов выполняет лексическое сравнение по полям, что вы и ищете.
<=>