User と Task の 2 つのクラスがあるとします。タスクはユーザーに属し、優先度 (1 から 3 までの整数、または nil) を持っています。
class User < ActiveRecord::Base
has_many :tasks
class Task < ActiveRecord::Base
belongs_to :user
attr_accessible :priority # Integer between 1 and 3, or nil
タスク数が最も多く、優先度が最も高い上位 10 人のユーザーを提示したいと考えています (最初に優先度が高く、次に中、次に低く、未評価の順に並べ替えます)。別の方法を考えましたが、これを処理するためのきれいな方法が見つかりません。
パフォーマンスを制限するために、コントローラーのメソッドで複雑な SQL リクエストを使用することを最初に考えました。
User.joins(:tasks).count(:all, :group => ["tasks.user_id", "priority"])
ただし、結果を並べ替えるのは簡単ではなく、最終的に並べ替えに 2 つのループを使用し、ユーザーをレンダリングするために別のループを使用する必要があります。さらに、この種の方法は、モデルではより論理的であると思います。
どう思いますか?これを処理する最もクリーンな方法は何ですか?