Aby przepisać zapytanie SQL, które masz w swoim pytaniu, myślę, że powinno wyglądać następująco (chociaż trudno mi w pełni zwizualizować relacje między Twoimi modelami, więc to trochę zgadywanie):
RagaContextApplicantsSong.
joins(:raga_contest_applicants => [:raga_content_rounds], :contest_cat).
group('raga_contest_rounds.contest_cat_id')
...tak, że joins
metoda obsługuje oba sprzężenia, a także WHERE
klauzula, po której na końcu następuje group
zadzwoń.
Więcej informacji:
Jeśli dołączasz do wielu skojarzeń do tego samego modelu możesz je po prostu wymienić :
Post.joins(:category, :comments)
Returns all posts that have a category and at least one comment
Jeśli dołączasz do zagnieżdżonych tabel, możesz je umieścić w postaci skrótu:
Post.joins(:comments => :guest)
Returns all comments made by a guest
Asocjacje zagnieżdżone, wielopoziomowe:
Category.joins(:posts => [{:comments => :guest}, :tags])
Returns all posts with their comments where the post has at least one comment made by a guest
Możesz także połączyć wywołania interfejsu ActiveRecord Query Interface w taki sposób, że:
Post.joins(:category, :comments)
...produces the same SQL as...
Post.joins(:category).joins(:comments)
Jeśli wszystko inne zawiedzie, zawsze możesz przekazać fragment SQL bezpośrednio do joins
metoda
jako odskocznię do przejścia od zapytania roboczego do czegoś bardziej skoncentrowanego na 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