我有一個rails/spree商店應用程序,它與spree's "User" rule進行了長時間的促銷活動。問題在於,在促銷活動激活的情況下,對於商店中促銷不適用的每個訂單都會創建不合格調整。這會在數據庫中增加顯着的膨脹並減緩結賬。Spreecommerce推廣「用戶」規則爲所有用戶創建調整
奇怪的是,其他具有類似限制性規則的促銷活動不會這樣做。如何修改規則或其他方式,以便停止爲所有訂單創建不合格的調整?
我有一個rails/spree商店應用程序,它與spree's "User" rule進行了長時間的促銷活動。問題在於,在促銷活動激活的情況下,對於商店中促銷不適用的每個訂單都會創建不合格調整。這會在數據庫中增加顯着的膨脹並減緩結賬。Spreecommerce推廣「用戶」規則爲所有用戶創建調整
奇怪的是,其他具有類似限制性規則的促銷活動不會這樣做。如何修改規則或其他方式,以便停止爲所有訂單創建不合格的調整?
通過添加eligible?
支票給CreateAdjustment
促進行動的perform
method固定所有調整。
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
您可以在順序裝飾器中添加一個函數,該函數將啓動轉換以完成。讓它刪除這是沒有資格
#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
此促銷使用任何其他規則?用戶是否可以看到不合格的調整? –
您好,Uri的推廣活動並未使用任何其他規則。調整對用戶不可見(因爲它不合格,調整沒有結果)。 – James
你附加了什麼計算器?我看了一下調整行動,我不明白爲什麼它會創建一個調整,除非數量不是0,這意味着計算器做了一些奇怪的事情... –