PostgreSQL
 sql >> база данни >  >> RDS >> PostgreSQL

Обхват за незадължителна връзка has_one със себе си

Първо се обърках от термините purchase и sale . Но смятам, че вашата актуализация ми помогна да разбера по-добре проблема.

Това, което разбрах, е, че всичко непродадено е покупки минус продажби. Следното трябва да ви даде този списък:

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

Актуализация:

Кратко обяснение на случващото се тук:

Обхватът всъщност не върши цялата работа в базата данни. Първо прави SQL избор на всички покупки, включително присъединената продажба. Това ви дава всички записи във вашите purchases маса. Тогава този обхват се връща към Ruby Array на select метод. Методът връща всички покупки p без sale което се прави чрез отхвърляне на покупки с продажба.

Надяваме се, че това малко изяснява какво прави обхватът.

Актуализация 2:

Обхват, който може да бъде свързан с верига!

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

В този обхват id s на покупки, които не са в Sale linked_indent_id на 's са избрани.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Postgres естествен ред по

  2. Postgres игнорира индекс на клеймо за време, защо?

  3. docker-compose postgres рестартиране след изпълнение на скриптове в docker-entrypoint-initdb.d

  4. Тип данни на Postgres ENUM или ПРОВЕРКА НА ОГРАНИЧЕНИЕТО?

  5. Как мога да вмъкна JSON обект в Postgres с помощта на Java readyStatement?