在Rails 3中对活动记录对象进行排序

问题描述:

我有一个Post模型has_one Status。我想对那些带有Post.status.description =='in process'的对象进行排序,然后对那些状态为'pending',后跟'active'的对象进行排序,每个对象都由Post.created_at内部排序。任何关于如何做到这一点的想法都将不胜感激。在Rails 3中对活动记录对象进行排序

一个皱纹:我努力使这项工作将分页,像这样:

posts.paginate(:page => page, :per_page=>10, :order=>"#{sort_by} #{direction}") 

所以很不幸,它看起来像我将不得不适应逻辑到命令的参数。

感谢

+0

group_by可以帮助你。请参阅以下示例:http://*.com/questions/4514265/help-with-sorting-records-in-ruby-on-rails – Zabba 2010-12-22 22:55:33

这可能是最好的状态重构为具有某种属性的域表。然后,您将从帖子加入状态并按状态排序。排序。

如果你不想做,你不介意在一个小SQL混合,你可以使用像一个case语句:

:order => "case when status = 'in process' then 1 when status = 'pending' then 2 else 3 end, created_at, created_at" 

,关于MySQL的作品;检查您的数据库的确切语法。在非常大的表上可能会有性能问题,但如果状态被编入索引,可能会很小。