For at omskrive den SQL-forespørgsel, du har i dit spørgsmål, tror jeg, at den burde være som følgende (selvom jeg har svært ved at visualisere dine modelforhold fuldt ud, så dette er lidt gætværk):
RagaContextApplicantsSong.
joins(:raga_contest_applicants => [:raga_content_rounds], :contest_cat).
group('raga_contest_rounds.contest_cat_id')
...sådan at joins
metode tager sig af begge de to joinforbindelser såvel som WHERE
klausul, efterfulgt til sidst af group
ring.
Som mere til reference:
Hvis du tilslutter dig flere foreninger til den samme model kan du blot angive dem :
Post.joins(:category, :comments)
Returns all posts that have a category and at least one comment
Hvis du tilslutter dig indlejrede tabeller, kan du liste dem som i en hash:
Post.joins(:comments => :guest)
Returns all comments made by a guest
Indlejrede associationer, flere niveauer:
Category.joins(:posts => [{:comments => :guest}, :tags])
Returns all posts with their comments where the post has at least one comment made by a guest
Du kan også sammenkæde ActiveRecord Query Interface-opkald sådan, at:
Post.joins(:category, :comments)
...produces the same SQL as...
Post.joins(:category).joins(:comments)
Hvis alt andet fejler, kan du altid passere et SQL-fragment direkte ind i joins
metode
som et springbræt til at komme fra din arbejdsforespørgsel til noget mere ARQI-centreret
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