PostgreSQL
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> PostgreSQL

Phạm vi cho một liên kết has_one tùy chọn với chính nó

Lần đầu tiên tôi bị nhầm lẫn bởi các điều khoản purchasesale . 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.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Làm thế nào để trả về số cột động trong hàm?

  2. Chèn nếu không tồn tại, nếu không trả về id trong postgresql

  3. Làm thế nào để giữ gìn trật tự của con cái xuất hiện sau cha mẹ của chúng

  4. Postgres nối hoặc đặt từng phần tử (nếu không tồn tại) của một mảng thành một cột mảng

  5. Làm thế nào để thực thi psql tương tác trong bộ chứa docker của nó?