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