Ответ 1
Чтобы переписать 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