Misschien wilt u de mogelijke manieren om dit soort zoekopdrachten te schrijven bekijken in dit antwoord voor het toepassen van voorwaarden op meerdere rijen in een join . Hier is een mogelijke optie voor het implementeren van uw zoekopdracht in Rails met behulp van 1B, de subquery-aanpak...
Definieer een zoekopdracht in de PostTag model dat de Post . zal pakken ID-waarden voor een gegeven Tag naam:
# PostTag.rb
def self.post_ids_for_tag(tag_name)
joins(:tag).where(tags: { name: tag_name }).select(:post_id)
end
Definieer een zoekopdracht in de Post model dat de Post . zal pakken records voor een gegeven Tag naam, met behulp van een subquerystructuur:
# Post.rb
def self.for_tag(tag_name)
where("id IN (#{PostTag.post_ids_for_tag(tag_name).to_sql})")
end
Dan kun je een zoekopdracht als deze gebruiken:
Post.for_tag("basil").for_tag("tomato")