質問で得た SQL クエリを書き直すには、次のようにする必要があると思います (ただし、モデルの関係を完全に視覚化するのに苦労しているため、これは少し当て推量です)。
RagaContextApplicantsSong.
joins(:raga_contest_applicants => [:raga_content_rounds], :contest_cat).
group('raga_contest_rounds.contest_cat_id')
...joins
メソッドが2つの結合と句の両方を処理し、最後に呼び出し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 Query Interface 呼び出しをチェーンすることもできます。
Post.joins(:category, :comments)
...produces the same SQL as...
Post.joins(:category).joins(:comments)
他のすべてが失敗した場合は、作業中のクエリからより ARQI 中心のものに移行するための足がかりとして、いつでも SQL フラグメントをメソッドに直接渡すことができます。joins
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