Zuerst verwirrten mich die Begriffe purchase
und sale
. Aber ich glaube, Ihr Update hat mir geholfen, das Problem besser zu verstehen.
Ich habe also verstanden, dass alles, was nicht verkauft wird, Einkäufe minus Verkäufe sind. Folgendes sollte Ihnen diese Liste geben:
scope :unsold, lambda {includes(:sale).select { |p| !p.sale.present? } }
Aktualisierung:
Eine kurze Erklärung dessen, was hier passiert:
Der Bereich erledigt nicht wirklich die gesamte Arbeit in der Datenbank. Es führt zuerst eine SQL-Auswahl aller Käufe einschließlich des verbundenen Verkaufs durch. Dadurch erhalten Sie alle Datensätze in Ihren purchases
Tisch. Dann fällt dieser Geltungsbereich auf Ruby Array
zurück auf select
Methode. Die Methode gibt alle Käufe p
zurück ohne sale
Dies geschieht durch Negieren von Käufen mit Verkauf.
Hoffe, das verdeutlicht ein wenig, was das Oszilloskop tut.
Aktualisierung 2:
Ein Bereich, der verkettet werden kann!
scope :unsold, lambda { where('id not in (?)', Sale.pluck(:linked_indent_id)) }
In diesem Bereich die id
s von Käufen, die nicht im Sale
sind 's linked_indent_id
ausgewählt sind.