Първо се обърках от термините purchase
и sale
. Но смятам, че вашата актуализация ми помогна да разбера по-добре проблема.
Това, което разбрах, е, че всичко непродадено е покупки минус продажби. Следното трябва да ви даде този списък:
scope :unsold, lambda {includes(:sale).select { |p| !p.sale.present? } }
Актуализация:
Кратко обяснение на случващото се тук:
Обхватът всъщност не върши цялата работа в базата данни. Първо прави SQL избор на всички покупки, включително присъединената продажба. Това ви дава всички записи във вашите purchases
маса. Тогава този обхват се връща към Ruby Array
на select
метод. Методът връща всички покупки p
без sale
което се прави чрез отхвърляне на покупки с продажба.
Надяваме се, че това малко изяснява какво прави обхватът.
Актуализация 2:
Обхват, който може да бъде свързан с верига!
scope :unsold, lambda { where('id not in (?)', Sale.pluck(:linked_indent_id)) }
В този обхват id
s на покупки, които не са в Sale
linked_indent_id
на 's са избрани.