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
我有一个 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