Du kanske vill granska de möjliga sätten att skriva den här typen av frågor i det här svaret för att tillämpa villkor på flera rader i en join . Här är ett möjligt alternativ för att implementera din fråga i Rails med hjälp av 1B, sub-query-metoden...
Definiera en fråga i PostTag
modell som tar tag i Post
ID-värden för en given Tag
namn:
# PostTag.rb
def self.post_ids_for_tag(tag_name)
joins(:tag).where(tags: { name: tag_name }).select(:post_id)
end
Definiera en fråga i Post
modell som tar tag i Post
poster för en given Tag
namn, med hjälp av en underfrågestruktur:
# Post.rb
def self.for_tag(tag_name)
where("id IN (#{PostTag.post_ids_for_tag(tag_name).to_sql})")
end
Då kan du använda en fråga som denna:
Post.for_tag("basil").for_tag("tomato")