我有 3 個范圍: 1 - 列出正在進行的促銷活動。2 - 整理最后的缺貨 3 - 列出未進行的促銷活動。
是否可以將所有內容組合在一個范圍內?它將是:列出正在進行的促銷活動,按照庫存從高到低的順序,然后是未進行的促銷活動。
我試過了,但我做不到。
scope :in_progress, -> { start_and_end_dates.in_weeks.between_hours }
scope :without_stock_last, lambda {
select('promotions.*, (CASE WHEN offers.current_inventory > 0 THEN 1 ELSE 0 END) AS "is_available"')
.order('is_available DESC')
.group('promotions.id, offers.current_inventory, offers.created_at')
}
scope :not_progress, lambda {
promotions_in_progress = Promotion.in_progress.pluck(:id).join(",")
Promotion.with_estabilishment.select("promotions.*, (CASE WHEN promotions.id NOT IN (#{promotions_in_progress}) THEN 0 END) AS is_unavailable")
.order('is_unavailable DESC')
}
uj5u.com熱心網友回復:
如果我明白你想要做的是讓 in_progress 在結果中首先顯示,然后你讓 not in progress 接下來出現。您可以:find_all將其他兩個結果的結果作為范圍連接。
我假設(如果我錯了請糾正我)你在促銷和報價之間有一對多的關系。所以我在without_stock_last范圍內做的是加入報價并設定 current_inventory 大于 2 的條件。
對于not_in_progress你可以只做一個 where.not 做一個結果的排除in_progress scope
scope :in_progress, -> { start_and_end_dates.in_weeks.between_hours }
scope :without_stock_last, -> { joins(:offfers).where(offers: {current_inventory: 2..}) }
scope :not_in_progress, -> { where.not(id: in_progress) }
scope :find_all, -> { without_stock_last not_in_progress }
請更清楚地描述您擁有的模型以及您想要進行的優化。
感謝
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/535570.html
