【发布时间】:2022-11-08 09:39:05
【问题描述】:
我有 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')
}
【问题讨论】:
-
第一个范围甚至不起作用?没有连接,因此它不可能从
promotions和offers表中选择列。如果没有很好地描述代码应该做什么、数据示例和预期输出,就不可能优化代码。见鬼,你甚至没有向我们展示这段代码属于什么模型。 -
“我试过了,但我做不到。”是幼儿说的——不是程序员。告诉我们您实际尝试了什么,什么没有奏效,这样我们至少有一个起点并知道您遇到了什么困难。 idownvotedbecau.se/noattempt
标签: ruby-on-rails ruby postgresql ruby-on-rails-3