¿Agrupación e indexación “compleja” en Rails?

Tengo un problema al que parece que no puedo encontrar una solución simple.

Quiero lograr lo siguiente:
* Tengo una lista de tareas, cada una con un propietario y una fecha de vencimiento
* Quiero mostrar una lista de todas las tareas agrupadas por propietario
* Quiero ordenar a los propietarios según las fechas de vencimiento: por ejemplo, el propietario con la fecha de vencimiento más baja primero, seguido del propietario con el segundo más bajo, etc.
* Quiero poder paginar los resultados, preferiblemente con will_paginate

Para ilustrar, este sería un resultado que estoy buscando:

Acosar
– tarea 1, fecha de vencimiento 1
– tarea 3, fecha de vencimiento 4
Ben
– tarea 2, fecha de vencimiento 2
Villancico
– tarea 4, fecha de vencimiento 3

Hasta ahora, puedo consultar a todos los propietarios con tareas, ordenarlos en un atributo virtual con su “fecha de vencimiento más temprana” y luego mostrarlos y sus tareas en una vista.

Hay múltiples problemas con este enfoque, imo:
* Ejecuto varias consultas desde la vista (owner.tasks.each, etc.). Siempre aprendí que ejecutar consultas desde la vista es malo.
* Estoy haciendo la clasificación cargando todos los registros en la memoria (atributo virtual), lo que podría ser problemático con el conjunto de registros grandes. * No tengo idea de cómo puedo obtener la paginación en esto, que será sensible a la cantidad de tareas que se muestran

Parece que no puedo romper esta tuerca, por lo que cualquier ayuda o sugerencia sería muy apreciada.
Erwin

Intente esta consulta, no ha proporcionado datos de muestra (idealmente utilizando SQL) para que podamos jugar nosotros mismos:

SELECT u.id as owner_id, u.name as owner_name, t.id, t.due_date FROM users u INNER JOIN tasks m ON u.id = m.owner_id INNER JOIN tasks t ON u.id = t.owner_id GROUP BY u.id, u.name, t.id, t.due_date ORDER BY MIN(m.due_date), t.due_date 

Debe obtener todos los datos que necesita en el orden correcto, y puede paginar simplemente aplicando LIMIT (o convirtiéndolos a AR y enviándolos a will_paginate).