Spreecommerce 促销 "User" 规则为所有用户创建调整

Spreecommerce promotion "User" rule creating adjustments for all users

我有一个 rails/spree 商店应用程序,它与 spree's "User" rule 有长期 运行 促销。问题是,在促销活动期间,为促销 不适用于 的商店中的每个订单创建了不合格的调整。这在数据库中增加了显着的膨胀并减慢了结帐速度。

奇怪的是,具有类似限制规则的其他促销活动不会这样做。我如何修改规则或以其他方式停止为所有订单创建不合格的调整?

您可以在订单装饰器中添加一个函数,该函数在转换完成时触发。让它删除所有不符合条件的调整

#app/models/spree/order_decorator.rb

module Spree
  Order.class_eval do
    state_machine do
      after_transition :to => :complete do |order|
        order.delete_ineligible_adjustments
      end
    end

    def delete_ineligible_adjustments
      self.adjustments.promotion.where(eligible: false).destroy_all
    end
  end
end

已通过向 CreateAdjustment 促销操作的 perform method 添加 eligible? 检查来修复。

def perform(options = {})
  order = options[:order]
  return if promotion_credit_exists?(order)
  return if !eligible?(order)

  amount = compute_amount(order)
  Spree::Adjustment.create!(
    amount: amount, 
    order: order,
    adjustable: order,
    source: self,
    label: "#{Spree.t(:promotion)} (#{promotion.name})"
  )       
  true    
end