PostgreSQL
 sql >> Baza danych >  >> RDS >> PostgreSQL

Jak znaleźć posty oznaczone więcej niż jednym tagiem w Rails i Postgresql

Możesz przejrzeć możliwe sposoby napisania tego rodzaju zapytania w tej odpowiedzi dotyczącej stosowania warunków do wielu wierszy w połączeniu . Oto jedna z możliwych opcji implementacji zapytania w Railsach przy użyciu 1B, podejście podzapytania...

Zdefiniuj zapytanie w PostTag model, który złapie Post Wartości ID dla danego Tag nazwa:

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

Zdefiniuj zapytanie w Post model, który złapie Post rekordy dla danego Tag nazwa, używając struktury podzapytania:

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

Następnie możesz użyć zapytania w ten sposób:

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


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. String_agg dla wielu kolumn

  2. ActiveRecord próbuje połączyć się z niewłaściwą bazą danych za pomocą rbenv

  3. Aktualizacja między 2 bazami danych przy użyciu dblink nie działa

  4. W jaki sposób wyjątek Postgres RAISE EXCEPTION jest konwertowany na wyjątek PDOException?

  5. Railsy - wyszukuj tylko rekordy, w których istnieje has_wiele powiązanych rekordów