PostgreSQL
 sql >> Base de Dados >  >> RDS >> PostgreSQL

Como encontrar posts marcados com mais de uma tag no Rails e Postgresql


Convém revisar as maneiras possíveis de escrever esse tipo de consulta esta resposta para aplicar condições a várias linhas em uma junção . Aqui está uma opção possível para implementar sua consulta no Rails usando 1B, a abordagem de subconsulta...

Defina uma consulta no PostTag model que pegará o Post Valores de ID para uma determinada Tag nome:
# PostTag.rb
def self.post_ids_for_tag(tag_name)
  joins(:tag).where(tags: { name: tag_name }).select(:post_id)
end

Defina uma consulta no Post model que pegará o Post registros para uma determinada Tag name, usando uma estrutura de subconsulta:
# Post.rb
def self.for_tag(tag_name)
  where("id IN (#{PostTag.post_ids_for_tag(tag_name).to_sql})")
end

Então você pode usar uma consulta como esta:
Post.for_tag("basil").for_tag("tomato")