2010-04-05 73 views
2

我需要一個結帳過程沒有一個交付和支付步驟 的(上接受貨到付款的一家商店工作,所以我只需要 地址步驟)。 我使用Spree 0.10.2改變大禮包-0.10.2結賬流程

事情我已經嘗試: 在site_extension.rb增加了以下狀態機被刪除

Checkout.state_machines[:state] = StateMachine::Machine.new(Checkout, :initial => 'address') do 
     after_transition :to => 'complete', :do => :complete_order 
     before_transition :to => 'complete', :do => :process_payment 
     event :next do 
     transition :to => 'complete', :from => 'address' 
     end 
    end 

不需要的步驟(至少在視覺上),但是當我提交 上的地址救援人員到場出現以下錯誤。

IndexError在 CheckoutsController#更新 「支付」是無效的名稱

縱觀痕跡,後來幾個類似的錯誤,我決定 盲目地覆蓋從checkouts_controller.rb兩種方法 site_extension.rb什麼也不做(因爲它們處理支付我 假設)

def clear_payments_if_in_payment_state 
end 

def object_params 
end 

這樣做會在所有交付字段和 帳單郵寄地址上引發驗證錯誤。 我隱約有一個概念,我需要重寫checkouts_controller.rb中的幾個方法 。如果這個概念是正確的,那麼 這些方法。

回答

1

1)拆下paymenttransition和交付狀態轉移步。

2)也覆蓋payment_required方法。

3)這些步驟需要位於app/models/spree目錄下的order_decorator.rb中。

checkout_flow do 
    go_to_state :address 
    # go_to_state :payment 
    go_to_state :complete 
    remove_transition :from => :delivery, :to => :confirm 
    remove_transition :from => :delivery, :to => :confirm 
    remove_transition :from => :payment, :to => :confirm 
    end 
    #Spree::Order.state_machine.before_transition :to => :payment, :do => :set_order 

    def set_order 
    self.create_proposed_shipments 
    end 
    def require_email 
    return false 
    end 
    def payment_required? 
    false 
    end 

我已經使用rails 3.2.14在spree 2-0-stable上進行了測試。

+0

雖然這是我所要求的另一個版本,但我已經接受了答案,因爲它應該適用於最新版本。 – kgthegreat 2013-09-24 04:42:55

1

對不起,我無法真正幫助您:使用Spree 0.10.2自定義結帳流程是一種噩夢。 但我建議切換到更新版本的Spree,如1.3穩定。 如果您切換到一個,這將是那麼容易,因爲在your_app_folder/app/models/spree用下面的代碼創建一個order_decorator.rb文件:你需要

Spree::Order.class_eval do 
    remove_checkout_step :delivery 
    remove_checkout_step :payment 
end