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")