Để viết lại truy vấn SQL mà bạn có trong câu hỏi của mình, tôi nghĩ nó sẽ giống như sau (mặc dù tôi đang gặp khó khăn trong việc hình dung đầy đủ các mối quan hệ mô hình của bạn, vì vậy đây là một chút phỏng đoán):
RagaContextApplicantsSong.
joins(:raga_contest_applicants => [:raga_content_rounds], :contest_cat).
group('raga_contest_rounds.contest_cat_id')
... sao cho joins
phương thức xử lý cả hai phép nối cũng như WHERE
, cuối cùng là group
gọi.
Để tham khảo thêm:
Nếu bạn đang tham gia nhiều liên kết vào cùng một mô hình bạn có thể chỉ cần liệt kê chúng :
Post.joins(:category, :comments)
Returns all posts that have a category and at least one comment
Nếu bạn đang tham gia các bảng lồng nhau, bạn có thể liệt kê chúng dưới dạng hàm băm:
Post.joins(:comments => :guest)
Returns all comments made by a guest
Các liên kết lồng nhau, nhiều cấp:
Category.joins(:posts => [{:comments => :guest}, :tags])
Returns all posts with their comments where the post has at least one comment made by a guest
Bạn cũng có thể xâu chuỗi các lệnh gọi Giao diện truy vấn ActiveRecord như sau:
Post.joins(:category, :comments)
...produces the same SQL as...
Post.joins(:category).joins(:comments)
Nếu vẫn thất bại, bạn luôn có thể chuyển trực tiếp một đoạn SQL vào joins
phương pháp
như một bước đệm để chuyển từ truy vấn đang làm việc của bạn sang một thứ gì đó tập trung vào ARQI hơn
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