我有一个rails / spree商店应用程序,其中包含spree's "User" rule的长期促销活动。问题是,在促销活动期间,会为促销不适用的商店中的每个订单创建不合格的调整。这会在数据库中增加大量膨胀并减慢结账速度。
奇怪的是,其他具有类似限制性规则的促销活动不会这样做。如何修改规则或其他方式,以便停止为所有订单创建不合格的调整?
答案 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