2015-05-29 20 views
4

我有一個rails/spree商店應用程序,它與spree's "User" rule進行了長時間的促銷活動。問題在於,在促銷活動激活的情況下,對於商店中促銷不適用的每個訂單都會創建不合格調整。這會在數據庫中增加顯着的膨脹並減緩結賬。Spreecommerce推廣「用戶」規則爲所有用戶創建調整

奇怪的是,其他具有類似限制性規則的促銷活動不會這樣做。如何修改規則或其他方式,以便停止爲所有訂單創建不合格的調整?

+0

此促銷使用任何其他規則?用戶是否可以看到不合格的調整? –

+0

您好,Uri的推廣活動並未使用任何其他規則。調整對用戶不可見(因爲它不合格,調整沒有結果)。 – James

+0

你附加了什麼計算器?我看了一下調整行動,我不明白爲什麼它會創建一個調整,除非數量不是0,這意味着計算器做了一些奇怪的事情... –

回答

0

通過添加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 
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 
相關問題