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

Zakres opcjonalnego asocjacji has_one ze sobą

Najpierw pomyliłem się z terminami purchase i sale . Ale uważam, że twoja aktualizacja pomogła mi lepiej zrozumieć problem.

Więc zrozumiałem, że wszystko, co nie zostało sprzedane, to zakupy minus sprzedaż. Poniższa lista powinna dać ci tę listę:

scope :unsold, lambda {includes(:sale).select { |p| !p.sale.present? } }

Aktualizacja:

Krótkie wyjaśnienie tego, co się tutaj dzieje:

Zakres tak naprawdę nie wykonuje całej pracy w bazie danych. Wykonuje selekcję SQL wszystkich zakupów, w tym najpierw dołączoną sprzedaż. To daje ci wszystkie rekordy w twoich purchases stół. Następnie ten zakres wraca do Rubiego Array na select metoda. Metoda zwraca wszystkie zakupy p bez sale co odbywa się poprzez negowanie zakupów ze sprzedażą.

Mam nadzieję, że to wyjaśnia nieco, co robi zakres.

Aktualizacja 2:

Zakres, który można połączyć w łańcuch!

scope :unsold, lambda { where('id not in (?)', Sale.pluck(:linked_indent_id)) }

W tym zakresie id s zakupów, których nie ma w Sale linked_indent_id są zaznaczone.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. PostgreSQL GROUP_CONCAT() Odpowiednik

  2. Gdzie jest plik konfiguracyjny Postgresql:„postgresql.conf” w systemie Windows?

  3. postgres hstore istnieje i nie istnieje w tym samym czasie

  4. Dołącz do trzech stołów, z których jeden nie ma klucza podstawowego

  5. Uzyskaj liczbę dni w miesiącu w PostgreSQL