Bạn có thể muốn xem lại các cách có thể để viết loại truy vấn này trong câu trả lời này để áp dụng điều kiện cho nhiều hàng tham gia . Đây là một tùy chọn khả thi để triển khai truy vấn của bạn trong Rails bằng cách sử dụng 1B, cách tiếp cận truy vấn phụ ...
Xác định truy vấn trong PostTag
mô hình sẽ lấy Post
Giá trị ID cho một thẻ Tag
nhất định tên:
# PostTag.rb
def self.post_ids_for_tag(tag_name)
joins(:tag).where(tags: { name: tag_name }).select(:post_id)
end
Xác định một truy vấn trong Post
mô hình sẽ lấy Post
bản ghi cho một thẻ Tag
nhất định tên, sử dụng cấu trúc truy vấn phụ:
# Post.rb
def self.for_tag(tag_name)
where("id IN (#{PostTag.post_ids_for_tag(tag_name).to_sql})")
end
Sau đó, bạn có thể sử dụng một truy vấn như sau:
Post.for_tag("basil").for_tag("tomato")