2010-12-22 96 views
0

我有一個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://stackoverflow.com/questions/4514265/help-with-sorting-records-in-ruby-on-rails – Zabba 2010-12-22 22:55:33

回答

0

這可能是最好的狀態重構爲具有某種屬性的域表。然後,您將從帖子加入狀態並按狀態排序。排序。

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

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

,關於MySQL的作品;檢查您的數據庫的確切語法。在非常大的表上可能會有性能問題,但如果狀態被編入索引,可能會很小。