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.