Potresti voler rivedere i possibili modi per scrivere questo tipo di query in questa risposta per applicare condizioni a più righe in un join . Ecco una possibile opzione per implementare la tua query in Rails usando 1B, l'approccio sottoquery...
Definisci una query nel PostTag
modello che afferrerà il Post
Valori ID per un dato Tag
nome:
# PostTag.rb
def self.post_ids_for_tag(tag_name)
joins(:tag).where(tags: { name: tag_name }).select(:post_id)
end
Definisci una query in Post
modello che afferrerà il Post
record per un dato Tag
nome, utilizzando una struttura di sottoquery:
# Post.rb
def self.for_tag(tag_name)
where("id IN (#{PostTag.post_ids_for_tag(tag_name).to_sql})")
end
Quindi puoi utilizzare una query come questa:
Post.for_tag("basil").for_tag("tomato")