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