Rails中的选择性排序3

时间:2012-08-26 21:26:19

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

关于高级排序的大多数问题涉及一些优先级字段,但这是一个不同的问题。

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

这不是assigned_individual然后job_title订购的请求(因为这会弄乱所有不属于我的项目的排序)。这是一个主要由job_title订购记录的请求,但要覆盖,以便首先显示带有assigned_individual_id = 3的记录。

2 个答案:

答案 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!

注意:我假设您已使用默认范围按名称订购项目。