PostgreSQL
 sql >> Database >  >> RDS >> PostgreSQL

Ambito per un'associazione has_one facoltativa con se stesso

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.