Tôi có các mô hình Trang và Đoạn có quan hệ has_and_belongs_to_many. Với một paragraph_id, tôi muốn nhận tất cả các trang phù hợp. ví dụ:Hiệu quả ActiveRecord has_and_belongs_to_many truy vấn
pages = Paragraph.find(paragraph_id).pages.all
Tuy nhiên, điều này có hai truy vấn. Nó có thể được thực hiện trong một truy vấn:
SELECT "pages".* FROM "pages"
INNER JOIN "pages_paragraphs" ON "pages_paragraphs"."page_id" = "pages"."id"
WHERE "pages_paragraphs"."paragraph_id" = 123
Nhưng điều này có thể được thực hiện mà không
- sử dụng find_by_sql
- mà không sửa đổi vào bảng page_paragraphs (ví dụ: thêm một id).
Cập nhật:
mô hình trang của tôi trông như thế này:
class Page < ActiveRecord::Base
has_and_belongs_to_many :paragraphs, uniq: true
end
@jdoe Tôi đã làm rõ câu hỏi của tôi, cảm ơn vì những nỗ lực của bạn. –
Vấn đề với hai truy vấn là gì? Có một ví dụ phức tạp hơn bạn đang cố gắng tối ưu hóa mà chúng ta không nhìn thấy? –
Không, tôi chỉ muốn thực hiện câu lệnh SQL trong câu hỏi của tôi với truy vấn activerecord. –