मैं पहली बार purchase
. शब्दों से भ्रमित हुआ और sale
. लेकिन आपका अपडेट मुझे विश्वास है कि मुझे समस्या को और अधिक समझने में मदद मिली।
तो जो मैं समझ गया वह है जो कुछ भी नहीं बिका है वह है खरीद घटाना बिक्री। निम्नलिखित आपको वह सूची देनी चाहिए:
scope :unsold, lambda {includes(:sale).select { |p| !p.sale.present? } }
अपडेट करें:
यहाँ क्या हो रहा है इसकी एक संक्षिप्त व्याख्या:
दायरा वास्तव में डेटाबेस में सभी काम नहीं करता है। यह पहले शामिल बिक्री सहित सभी खरीद का एक SQL चयन करता है। यह आपको आपके purchase
. में सभी रिकॉर्ड देता है मेज़। फिर यह दायरा वापस रूबी Array
पर आ जाता है select
. पर तरीका। विधि सभी खरीदारियों को लौटाती है p
बिना sale
. के जो बिक्री के साथ खरीद को नकार कर किया जाता है।
आशा है कि यह स्पष्ट हो गया है कि दायरा क्या कर रहा है।
अपडेट 2:
एक दायरा जो श्रृंखलाबद्ध है!
scope :unsold, lambda { where('id not in (?)', Sale.pluck(:linked_indent_id)) }
इस दायरे में id
उन खरीदारियों की संख्या जो sale
में नहीं हैं का linked_indent_id
चुने गए हैं।