Untuk menulis ulang kueri SQL yang Anda miliki dalam pertanyaan Anda, saya pikir itu harus seperti berikut (walaupun saya mengalami kesulitan memvisualisasikan sepenuhnya hubungan model Anda, jadi ini sedikit dugaan):
RagaContextApplicantsSong.
joins(:raga_contest_applicants => [:raga_content_rounds], :contest_cat).
group('raga_contest_rounds.contest_cat_id')
...sehingga joins
metode menangani kedua gabungan serta WHERE
klausa, diikuti akhirnya oleh group
panggilan.
Sebagai referensi lainnya:
Jika Anda menggabungkan beberapa asosiasi ke model yang sama Anda cukup mencantumkannya :
Post.joins(:category, :comments)
Returns all posts that have a category and at least one comment
Jika Anda bergabung dengan tabel bersarang, Anda dapat mencantumkannya seperti dalam hash:
Post.joins(:comments => :guest)
Returns all comments made by a guest
Asosiasi bertingkat, beberapa level:
Category.joins(:posts => [{:comments => :guest}, :tags])
Returns all posts with their comments where the post has at least one comment made by a guest
Anda juga dapat menyambungkan panggilan Antarmuka Kueri ActiveRecord sedemikian rupa sehingga:
Post.joins(:category, :comments)
...produces the same SQL as...
Post.joins(:category).joins(:comments)
Jika semuanya gagal, Anda selalu dapat melewati fragmen SQL langsung ke joins
metode
sebagai batu loncatan untuk beralih dari kueri kerja Anda ke sesuatu yang lebih berpusat pada ARQI
Client.joins('LEFT OUTER JOIN addresses ON addresses.client_id = clients.id')
=> SELECT clients.* FROM clients LEFT OUTER JOIN addresses ON addresses.client_id = clients.id