Primero me confundí con los términos purchase
y sale
. Pero creo que su actualización me ayudó a comprender mejor el problema.
Entonces, lo que entendí es que todo lo que no se vende son compras menos ventas. Lo siguiente debería darle esa lista:
scope :unsold, lambda {includes(:sale).select { |p| !p.sale.present? } }
Actualización:
Una breve explicación de lo que está sucediendo aquí:
El alcance realmente no hace todo el trabajo en la base de datos. Hace una selección SQL de todas las compras, incluida la venta unida primero. Esto le da todos los registros en sus purchases
mesa. Luego, este ámbito recurre a Ruby Array
en el select
método. El método devuelve todas las compras p
sin una sale
que se hace negando las compras con la venta.
Espero que esto aclare un poco lo que está haciendo el osciloscopio.
Actualización 2:
¡Un visor que se puede encadenar!
scope :unsold, lambda { where('id not in (?)', Sale.pluck(:linked_indent_id)) }
En este ámbito el id
s de Compras que no están en Sale
linked_indent_id
están seleccionados.