Es posible que desee revisar las posibles formas de escribir este tipo de consulta en esta respuesta para aplicar condiciones a varias filas en una unión . Aquí hay una opción posible para implementar su consulta en Rails usando 1B, el enfoque de subconsulta...
Definir una consulta en el PostTag modelo que captará la Post Valores de ID para una Tag determinada nombre:
# PostTag.rb
def self.post_ids_for_tag(tag_name)
joins(:tag).where(tags: { name: tag_name }).select(:post_id)
end
Definir una consulta en la Post modelo que captará la Post registros para una determinada Tag nombre, utilizando una estructura de subconsulta:
# Post.rb
def self.for_tag(tag_name)
where("id IN (#{PostTag.post_ids_for_tag(tag_name).to_sql})")
end
Entonces puedes usar una consulta como esta:
Post.for_tag("basil").for_tag("tomato")