PostgreSQL
 sql >> Database >  >> RDS >> PostgreSQL

Come trovare post taggati con più di un tag in Rails e Postgresql

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