sql >> Base de Datos >  >> RDS >> PostgreSQL

Ámbito para una asociación opcional has_one consigo mismo

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.