ホームページ >データベース >mysql チュートリアル >Rails 3 で ActiveRecord の結果をアソシエーション数で並べ替えるにはどうすればよいですか?

Rails 3 で ActiveRecord の結果をアソシエーション数で並べ替えるにはどうすればよいですか?

Linda Hamilton
Linda Hamiltonオリジナル
2024-11-26 13:18:11865ブラウズ

How to Order ActiveRecord Results by Association Count in Rails 3?

関連付け数による ActiveRecord の結果の順序付け

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 サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。