За да пренапишете SQL заявката, която имате във вашия въпрос, мисля, че трябва да бъде както следва (въпреки че ми е трудно да визуализирам напълно вашите модели отношения, така че това е малко предположение):
RagaContextApplicantsSong.
joins(:raga_contest_applicants => [:raga_content_rounds], :contest_cat).
group('raga_contest_rounds.contest_cat_id')
...така че joins
методът се грижи както за двете съединения, така и за WHERE
клауза, последвана накрая от group
обадете се.
Повече за справка:
Ако присъединявате няколко асоциации към един и същ модел можете просто да ги изброите :
Post.joins(:category, :comments)
Returns all posts that have a category and at least one comment
Ако се присъединявате към вложени таблици, можете да ги изброите като хеш:
Post.joins(:comments => :guest)
Returns all comments made by a guest
Вложени асоциации, много нива:
Category.joins(:posts => [{:comments => :guest}, :tags])
Returns all posts with their comments where the post has at least one comment made by a guest
Можете също да верижите повиквания на интерфейса на заявка ActiveRecord, така че:
Post.joins(:category, :comments)
...produces the same SQL as...
Post.joins(:category).joins(:comments)
Ако всичко друго не успее, винаги можете да прехвърлите SQL фрагмент директно в joins
метод
като стъпка към преминаване от вашата работна заявка към нещо по-ориентирано на 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