关于高级排序的大多数问题涉及一些优先级字段,但这是一个不同的问题。
我有一系列按标题排序的项目,这些项目分配给公司的个人。我希望能够让每个人的项目浮动到顶部。
这不是assigned_individual
然后job_title
订购的请求(因为这会弄乱所有不属于我的项目的排序)。这是一个主要由job_title
订购记录的请求,但要覆盖,以便首先显示带有assigned_individual_id = 3
的记录。
答案 0 :(得分: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
的保护范围。
如果需要,可以轻松扩展此技术以将多个用户推送到顶部。
答案 1 :(得分:0)
在2遍中构建它:
@projects = current_user.projects
@projects += Project.all
@projects.uniq!
注意:我假设您已使用默认范围按名称订购项目。