sql >> Base de Datos >  >> RDS >> PostgreSQL

Cómo encontrar publicaciones etiquetadas con más de una etiqueta en Rails y Postgresql

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