Jeg blev først forvirret over begreberne purchase
og sale
. Men din opdatering tror jeg hjalp mig med at forstå problemet mere.
Så hvad jeg forstod var, at alt usolgt er køb minus salg. Følgende skulle give dig denne liste:
scope :unsold, lambda {includes(:sale).select { |p| !p.sale.present? } }
Opdatering:
En kort forklaring på, hvad der sker her:
Omfanget gør ikke rigtig alt arbejdet i databasen. Det foretager en SQL-udvælgelse af alle indkøb, inklusive det samlede salg først. Dette giver dig alle registreringerne i dine purchase
bord. Så falder dette omfang tilbage til Ruby Array
på select
metode. Metoden returnerer alle køb p
uden et sale
hvilket gøres ved at negere køb med salg.
Håber dette opklarer lidt, hvad omfanget gør.
Opdatering 2:
Et kikkert, der kan kædes sammen!
scope :unsold, lambda { where('id not in (?)', Sale.pluck(:linked_indent_id)) }
I dette omfang er id
s af køb, der ikke er i Sale
's linked_indent_id
er valgt.