2010-12-22 16 views
0

Ich habe ein Post-Modell, das einen Status hat. Ich möchte die Objekte sortieren, in denen diejenigen mit einer Post.status.description == 'in Bearbeitung' zuerst sind, gefolgt von denen mit dem Status 'ausstehend', gefolgt von 'aktiv', wobei jede intern von Post.created_at sortiert wird. Irgendwelche Ideen darüber, wie man dies tun könnte, würden sehr geschätzt werden.Sortieren von ActiveRecord-Objekten in Rails 3

Ein Falten: Ich versuche, diese Arbeit zu machen mit wird Paginieren wie so:

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

So leider sieht es aus wie ich die Logik in den Ordnungsparameter passen müssen.

Dank

+0

group_by kann Ihnen helfen. Sehen Sie für ein Beispiel: http://stackoverflow.com/questions/4514265/help-with-sorting-records-in-ruby-on-rails – Zabba

Antwort

0

Es könnte am besten sein, die Zustände in einer Domäne Tabelle Refactoring, die eine Art Attribut hat. Dann würden Sie von Posts zu Status und nach statuss.sort_order sortieren.

Wenn Sie das nicht tun wollen und es Ihnen nichts ausmacht in einem kleinen SQL-Mischen, könnten Sie eine Case-Anweisung wie verwenden:

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

Das auf MySQL arbeitet; Überprüfe deine Datenbank auf genaue Syntax. Bei sehr großen Tabellen kann es zu einem Leistungseinbruch kommen, wenngleich der Status wahrscheinlich nur minimal ist.