Chcete-li přepsat dotaz SQL, který máte ve své otázce, myslím, že by to mělo být jako následující (ačkoli mám problém plně si vizualizovat vztahy vašeho modelu, takže je to trochu dohad):
RagaContextApplicantsSong.
joins(:raga_contest_applicants => [:raga_content_rounds], :contest_cat).
group('raga_contest_rounds.contest_cat_id')
...tak, že se joins
metoda se stará o obě dvě spojení a také o WHERE
klauzule a nakonec group
zavolejte.
Další informace:
Pokud se ke stejnému modelu připojujete k více asociacím můžete je jednoduše uvést :
Post.joins(:category, :comments)
Returns all posts that have a category and at least one comment
Pokud se připojujete k vnořeným tabulkám, můžete je uvést jako hash:
Post.joins(:comments => :guest)
Returns all comments made by a guest
Vnořená přidružení, více úrovní:
Category.joins(:posts => [{:comments => :guest}, :tags])
Returns all posts with their comments where the post has at least one comment made by a guest
Můžete také zřetězit volání ActiveRecord Query Interface takto:
Post.joins(:category, :comments)
...produces the same SQL as...
Post.joins(:category).joins(:comments)
Pokud vše ostatní selže, můžete vždy předat fragment SQL přímo do joins
metoda
jako odrazový můstek k tomu, abyste se dostali od vašeho pracovního dotazu k něčemu, co je více zaměřené 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