我有一个问题,我似乎无法找到一个简单的解决方案。
我想实现以下目标:
*我有一个任务列表,每个任务都有一个所有者和截止日期
*我想显示按所有者分组的所有任务列表
*我想根据截止日期对所有者进行排序:例如拥有最低到期日的所有者,其次是拥有第二低的所有者等
*我希望能够对结果进行分页,最好使用will_paginate
为了说明,这将是我正在寻找的结果:
哈利
- 任务1,截止日期1
- 任务3,截止日期4
本
- 任务2,截止日期2
卡罗尔
- 任务4,截止日期3
到目前为止,我可以查询所有拥有任务的所有者,使用“最早到期日”对虚拟属性进行排序,然后在视图中显示和他们的任务。
这种方法有很多问题,imo:
*我从视图(owner.tasks.each等)运行多个查询。我总是知道从视图中运行查询是不好的
*我正在通过加载内存中的所有记录(虚拟属性)来进行排序,这可能会因大记录集而出现问题。
*我不知道我如何能够对此进行分页,这将对显示的任务量敏感
我似乎无法破解这个坚果,所以任何帮助或提示将不胜感激! 欧文
答案 0 :(得分:1)
尝试此查询,您还没有提供示例数据(理想情况下使用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)即可对其进行分页。