Spreecommerce促销“用户”规则为所有用户创建调整

时间:2015-05-29 01:28:16

标签: ruby-on-rails spree

我有一个rails / spree商店应用程序,其中包含spree's "User" rule的长期促销活动。问题是,在促销活动期间,会为促销适用的商店中的每个订单创建不合格的调整。这会在数据库中增加大量膨胀并减慢结账速度。

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

2 个答案:

答案 0 :(得分:0)

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

#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

答案 1 :(得分:0)

通过向eligible?促销活动的perform method添加CreateAdjustment检查来解决此问题。

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