All'inizio sono stato confuso dai termini purchase
e sale
. Ma credo che il tuo aggiornamento mi abbia aiutato a capire meglio il problema.
Quindi quello che ho capito è che tutto ciò che è invenduto è acquisti meno vendite. Di seguito dovrebbe darti quell'elenco:
scope :unsold, lambda {includes(:sale).select { |p| !p.sale.present? } }
Aggiornamento:
Una breve spiegazione di ciò che sta accadendo qui:
L'ambito non esegue davvero tutto il lavoro nel database. Esegue prima una selezione SQL di tutti gli acquisti inclusa la vendita unita. Questo ti dà tutti i record nei tuoi purchases
tavolo. Quindi questo ambito ricade su Ruby Array
su select
metodo. Il metodo restituisce tutti gli acquisti p
senza una sale
che si fa negando gli acquisti con la vendita.
Spero che questo chiarisca un po' cosa sta facendo l'ambito.
Aggiornamento 2:
Un mirino concatenabile!
scope :unsold, lambda { where('id not in (?)', Sale.pluck(:linked_indent_id)) }
In questo ambito il id
s di Acquisti che non sono in Sale
linked_indent_id
sono selezionati.