Saya pertama kali bingung dengan istilah purchase
dan sale
. Tetapi pembaruan Anda, saya yakin, membantu saya lebih memahami masalahnya.
Jadi yang saya pahami adalah apa pun yang tidak terjual adalah pembelian dikurangi penjualan. Berikut ini akan memberi Anda daftar itu:
scope :unsold, lambda {includes(:sale).select { |p| !p.sale.present? } }
Pembaruan:
Penjelasan singkat tentang apa yang terjadi di sini:
Ruang lingkup tidak benar-benar melakukan semua pekerjaan dalam database. Itu melakukan pemilihan SQL dari semua pembelian termasuk penjualan gabungan terlebih dahulu. Ini memberi Anda semua catatan di purchase
meja. Kemudian cakupan ini kembali ke Ruby Array
pada select
metode. Metode ini mengembalikan semua pembelian p
tanpa sale
yang dilakukan dengan meniadakan pembelian dengan penjualan.
Semoga ini menjelaskan sedikit tentang apa yang dilakukan ruang lingkup.
Pembaruan 2:
Lingkup yang dapat dirantai!
scope :unsold, lambda { where('id not in (?)', Sale.pluck(:linked_indent_id)) }
Dalam lingkup ini id
s Pembelian yang tidak dalam Sale
linked_indent_id
dipilih.