PostgreSQL
 sql >> Datenbank >  >> RDS >> PostgreSQL

So finden Sie Posts, die mit mehr als einem Tag in Rails und Postgresql getaggt sind

Vielleicht möchten Sie die Möglichkeiten zum Schreiben dieser Art von Abfrage in dieser Antwort zum Anwenden von Bedingungen auf mehrere Zeilen überprüfen in einem Join . Hier ist eine mögliche Option für die Implementierung Ihrer Abfrage in Rails mit 1B, dem Sub-Query-Ansatz ...

Definieren Sie eine Abfrage im PostTag Modell, das den Post aufgreift ID-Werte für einen bestimmten Tag Name:

# PostTag.rb
def self.post_ids_for_tag(tag_name)
  joins(:tag).where(tags: { name: tag_name }).select(:post_id)
end

Definieren Sie eine Abfrage im Post Modell, das den Post aufgreift Datensätze für einen bestimmten Tag name, unter Verwendung einer Unterabfragestruktur:

# Post.rb
def self.for_tag(tag_name)
  where("id IN (#{PostTag.post_ids_for_tag(tag_name).to_sql})")
end

Dann können Sie eine Abfrage wie diese verwenden:

Post.for_tag("basil").for_tag("tomato")