Rails 3 では、モデルからデータを取得し、関連付け数に基づいて結果を並べ替える必要があるシナリオに遭遇することがあります。別のモデルの関連レコード。これは、ActiveRecord の名前付きスコープを使用して実現できます。
関連する Listen レコードが多数あるモデル Song の例を考えてみましょう。最もよく聴かれた 5 曲を見つけるには、名前付きスコープのアプローチを利用できます。
class Song has_many :listens scope :top5, select("songs.id, OTHER_ATTRS_YOU_NEED, count(listens.id) AS listens_count"). joins(:listens). group("songs.id"). order("listens_count DESC"). limit(5) # Retrieve the top 5 songs based on listen count Song.top5
この名前付きスコープでは、select メソッドを使用して、カスタム フィールドとともに目的の列を含めます。 listens_count 列はリッスン数を表します。 joins メソッドは、Song モデルと Listen モデル間の関連付けを確立します。 group メソッドは、結果を Song.id ごとにグループ化し、各曲の聴取回数を集計します。最後に、order メソッドとlimit メソッドは結果を試聴回数の降順に並べ替え、出力を上位 5 曲に制限します。
以上がRails 3 で ActiveRecord の結果をアソシエーション数で並べ替えるにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。