Du vil måske gennemgå de mulige måder at skrive denne form for forespørgsel på i dette svar til at anvende betingelser på flere rækker i en join . Her er en mulig mulighed for at implementere din forespørgsel i Rails ved hjælp af 1B, sub-query-tilgangen...
Definer en forespørgsel i PostTag
model, der vil fange Post
ID-værdier for et givet Tag
navn:
# PostTag.rb
def self.post_ids_for_tag(tag_name)
joins(:tag).where(tags: { name: tag_name }).select(:post_id)
end
Definer en forespørgsel i Post
model, der vil fange Post
poster for et givet Tag
navn ved hjælp af en underforespørgselsstruktur:
# Post.rb
def self.for_tag(tag_name)
where("id IN (#{PostTag.post_ids_for_tag(tag_name).to_sql})")
end
Så kan du bruge en forespørgsel som denne:
Post.for_tag("basil").for_tag("tomato")