Para reescribir la consulta SQL que tiene en su pregunta, creo que debería ser como la siguiente (aunque me está costando mucho visualizar completamente las relaciones de su modelo, así que esto es un poco de conjetura):
RagaContextApplicantsSong.
joins(:raga_contest_applicants => [:raga_content_rounds], :contest_cat).
group('raga_contest_rounds.contest_cat_id')
... tal que el joins
El método se encarga de las dos uniones, así como del WHERE
cláusula, seguida finalmente por el group
llamar.
Más como referencia:
Si está uniendo varias asociaciones al mismo modelo simplemente puede enumerarlas :
Post.joins(:category, :comments)
Returns all posts that have a category and at least one comment
Si está uniendo tablas anidadas, puede enumerarlas como un hash:
Post.joins(:comments => :guest)
Returns all comments made by a guest
Asociaciones anidadas, nivel múltiple:
Category.joins(:posts => [{:comments => :guest}, :tags])
Returns all posts with their comments where the post has at least one comment made by a guest
También puede encadenar llamadas de la interfaz de consulta de ActiveRecord de manera que:
Post.joins(:category, :comments)
...produces the same SQL as...
Post.joins(:category).joins(:comments)
Si todo lo demás falla, siempre puede pasar un fragmento de SQL directamente a el joins
método
como un trampolín para pasar de su consulta de trabajo a algo más centrado en 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