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

时间:2011-04-04 15:53:47

标签: ruby-on-rails ruby ruby-on-rails-3

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

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

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

哈利
- 任务1,截止日期1
- 任务3,截止日期4

- 任务2,截止日期2
卡罗尔
- 任务4,截止日期3

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

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

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

1 个答案:

答案 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)即可对其进行分页。