Lần đầu tiên tôi bị nhầm lẫn bởi các điều khoản purchase
và sale
. Nhưng cập nhật của bạn mà tôi tin rằng đã giúp tôi hiểu vấn đề hơn.
Vì vậy, những gì tôi hiểu là bất cứ điều gì không bán được là mua hàng trừ doanh thu. Sau đây sẽ cung cấp cho bạn danh sách đó:
scope :unsold, lambda {includes(:sale).select { |p| !p.sale.present? } }
Cập nhật:
Giải thích ngắn gọn về những gì đang xảy ra ở đây:
Phạm vi không thực sự thực hiện tất cả các công việc trong cơ sở dữ liệu. Nó thực hiện một lựa chọn SQL của tất cả các giao dịch mua bao gồm cả bán hàng đã tham gia trước. Điều này cung cấp cho bạn tất cả các bản ghi trong purchase
của bạn bàn. Sau đó, phạm vi này trở lại Ruby Array
trên select
phương pháp. Phương thức này trả về tất cả các giao dịch mua p
không có sale
được thực hiện bằng cách phủ định việc mua với bán.
Hy vọng điều này sẽ làm rõ những gì phạm vi đang làm một chút.
Cập nhật 2:
Một phạm vi có thể thay đổi được!
scope :unsold, lambda { where('id not in (?)', Sale.pluck(:linked_indent_id)) }
Trong phạm vi này, id
các Giao dịch mua không thuộc Sale
của linked_indent_id
được chọn.