Rumah >pangkalan data >tutorial mysql >Bagaimana untuk Memesan Keputusan ActiveRecord mengikut Kiraan Persatuan dalam Rails 3?

Bagaimana untuk Memesan Keputusan ActiveRecord mengikut Kiraan Persatuan dalam Rails 3?

Linda Hamilton
Linda Hamiltonasal
2024-11-26 13:18:11818semak imbas

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

Memesan Keputusan ActiveRecord mengikut Kiraan Persatuan

Dalam Rails 3, anda boleh menghadapi senario di mana anda perlu mendapatkan semula data daripada model dan mengisih keputusan berdasarkan bilangan rekod yang berkaitan dalam model lain. Ini boleh dicapai menggunakan skop bernama ActiveRecord.

Pertimbangkan contoh Lagu model yang mempunyai banyak rekod Dengar yang berkaitan. Untuk mencari lima lagu yang paling banyak didengar, anda boleh menggunakan pendekatan skop yang dinamakan:

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

Dalam skop bernama ini, kami menggunakan kaedah pilih untuk memasukkan lajur yang diminati bersama-sama dengan adat lajur listens_count yang mewakili kiraan dengar. Kaedah gabungan mewujudkan perkaitan antara model Lagu dan Dengar. Kaedah kumpulan mengumpulkan hasil mengikut Song.id untuk mengagregat kiraan mendengar bagi setiap lagu. Akhir sekali, susunan dan kaedah had mengisih hasil dalam tertib menurun bagi kiraan dengar dan hadkan output kepada lima lagu teratas.

Atas ialah kandungan terperinci Bagaimana untuk Memesan Keputusan ActiveRecord mengikut Kiraan Persatuan dalam Rails 3?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn