PostgreSQL
 sql >> Base de données >  >> RDS >> PostgreSQL

Comment trouver des publications taguées avec plus d'une balise dans Rails et Postgresql

Vous voudrez peut-être revoir les façons possibles d'écrire ce type de requête dans cette réponse pour appliquer des conditions à plusieurs lignes dans une jointure . Voici une option possible pour implémenter votre requête dans Rails en utilisant 1B, l'approche de sous-requête...

Définir une requête dans le PostTag modèle qui saisira le Post Valeurs d'identification pour un Tag donné nom :

# PostTag.rb
def self.post_ids_for_tag(tag_name)
  joins(:tag).where(tags: { name: tag_name }).select(:post_id)
end

Définir une requête dans le Post modèle qui saisira le Post enregistrements pour un Tag donné nom, en utilisant une structure de sous-requête :

# Post.rb
def self.for_tag(tag_name)
  where("id IN (#{PostTag.post_ids_for_tag(tag_name).to_sql})")
end

Ensuite, vous pouvez utiliser une requête comme celle-ci :

Post.for_tag("basil").for_tag("tomato")