铁路中的“复杂”分组和索引?

我有一个问题,我似乎无法找到一个简单的解决方案。

我想实现以下目标:
*我有一个任务列表,每个任务都有一个所有者和截止日期
*我想显示按所有者分组的所有任务的列表
*我想根据截止日期对所有者进行排序:例如,首先具有最低到期日的所有者,然后是具有第二低的所有者,等等
*我希望能够对结果进行分页,最好使用will_paginate

为了说明,这将是我正在寻找的结果:

掠夺
– 任务1,截止日期1
– 任务3,截止日期4

– 任务2,截止日期2
颂歌
– 任务4,截止日期3

到目前为止,我可以查询所有拥有任务的所有者,使用“最早到期日期”对虚拟属性进行排序,然后在视图中显示它们任务。

这种方法存在多个问题,即:
*我从视图(owner.tasks.each等)运行多个查询。 我总是知道从视图中运行查询很糟糕
*我正在通过加载内存中的所有记录(虚拟属性)来进行排序,这可能会因大记录集而出现问题。 *我不知道如何在这方面加入分页,这将对显示的任务量敏感

我似乎无法破解这个坚果,所以任何帮助或提示将不胜感激!
欧文

尝试此查询,您还没有提供示例数据(理想情况下使用SQL),以便我们可以自己玩:

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 

您应该以正确的顺序获得所需的所有数据,并且可以简单地通过对其应用LIMIT (或将其转换为AR并将其提交到will_paginate)进行分页。