sql >> Database >  >> RDS >> PostgreSQL

Bereik voor een optionele has_one associatie met zichzelf

Ik raakte voor het eerst in de war door de termen purchase en sale . Maar ik geloof dat je update me heeft geholpen het probleem beter te begrijpen.

Dus wat ik begreep, is dat alles wat onverkocht is, aankopen minus verkopen zijn. Het volgende zou je die lijst moeten geven:

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

Bijwerken:

Een korte uitleg van wat hier gebeurt:

De scope doet niet echt al het werk in de database. Het doet eerst een SQL-selectie van alle aankopen, inclusief de samengevoegde verkoop. Dit geeft u alle records in uw purchases tafel. Dan valt deze scope terug op Ruby Array op de select methode. De methode retourneert alle aankopen p zonder sale die wordt gedaan door aankopen met verkoop teniet te doen.

Ik hoop dat dit een beetje duidelijk maakt wat de scope doet.

Update 2:

Een scope die te koppelen is!

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

In dit kader is de id s van aankopen die niet in Sale . zijn 's linked_indent_id zijn geselecteerd.



  1. SQL:syntaxisfout met intersectie?

  2. Oracle:CSV-bestand importeren

  3. Verschil tussen huidige en vorige tijdstempel

  4. Hoe u uw MySQL-instanties kunt laten mislukken of crashen voor testen