sql >> Databáze >  >> RDS >> PostgreSQL

Rozsah pro volitelné přiřazení has_one k sobě samému

Nejprve mě zmátly pojmy purchase a sale . Ale věřím, že vaše aktualizace mi pomohla lépe porozumět problému.

Takže jsem pochopil, že vše, co se neprodalo, jsou nákupy mínus prodeje. Následující seznam by vám měl poskytnout tento seznam:

scope :unsold, lambda {includes(:sale).select { |p| !p.sale.present? } }

Aktualizace:

Stručné vysvětlení toho, co se zde děje:

Rozsah ve skutečnosti nevykonává veškerou práci v databázi. Nejprve provede SQL výběr všech nákupů včetně spojeného prodeje. Získáte tak všechny záznamy ve vašich purchases stůl. Pak tento rozsah spadá zpět do Ruby Array na select metoda. Metoda vrací všechny nákupy p bez sale což se provádí negací nákupů s prodejem.

Doufám, že to trochu objasní, co rozsah dělá.

Aktualizace 2:

Rozsah, který lze řetězit!

scope :unsold, lambda { where('id not in (?)', Sale.pluck(:linked_indent_id)) }

V tomto rozsahu id s nákupů, které nejsou v Sale linked_indent_id jsou vybrány.



  1. Složený FULLTEXTOVÝ index v MySQL

  2. Jak se vzdáleně připojit k databázi Oracle 11g

  3. Jak otestovat prázdný výsledek SQL v ASP

  4. jak zajistit, aby záznam byl vždy nahoře v dané sadě výsledků v mysql?