1

大多数关于高级排序的问题都涉及一些优先领域,但这里有一个不同的问题。

我有一系列按标题排序的项目,这些项目分配给公司的个人。我希望能够让每个人的项目浮动到那个人的顶部

这不是到assigned_individual那时订购的请求job_title(因为这会弄乱所有不属于我的项目的订购)。这是一个请求,要求记录仍然主要按顺序排序,job_title但要进行覆盖,以便assigned_individual_id = 3首先显示具有的记录。

4

2 回答 2

1

不难,您只需将 CASE 滑入 ORDER BY 即可手动将感兴趣的行推到顶部,如下所示:

id = M.send(:sanitize_sql, ['?', id])
M.order("case when assigned_individual = #{id} then 0 else 1 end, job_title")

当然,id您想要的用户在哪里。如果这是在 M 的一种方法中完成的,那么您将不需要使用send来绕过sanitize_sql.

如果需要,可以轻松扩展此技术以将多个​​用户推到顶部。

于 2012-08-26T22:18:24.383 回答
0

分两遍构建它:

@projects = current_user.projects
@projects += Project.all
@projects.uniq!

注意:我假设您已使用默认范围按名称对项目进行排序。

于 2012-08-26T22:11:14.503 回答