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.