Ответ 1
Я бы предложил поместить столбец, который вы хотите отсортировать, в массив.
entries.sort_by { |l| [l.project.name, l.project.time] }
Это будет учитывать порядок естественного сортировки для каждого типа.
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] }
это работает, потому что оператор <=>
на массивах выполняет полевое "лексическое" сравнение, которое вы ищете.