2012-06-02 34 views
2

我的環境。如何自定義Spree結帳過程?

Mac OSX 10.7.4 
Ruby 1.9.3p0 
Rails 3.2.3 
Spree 1.1.0 

您好,我是日本程序員,也是Spree的新手。我想定製Spree的結帳流程,以移除結帳步驟,例如選擇付款方式和付款方式。

根據Spree Guides,我需要爲Order模型定義一個全新的狀態機。

因此,我添加了order_decorator.rbapp/models目錄,如下所示。

# app/models/order_decorator.rb 

module SpreeCustomExtension 
    class Engine < Rails::Engine 
    def self.activate 
     Order.class_eval do 
     Order.state_machines[:state] = StateMachine::Machine.new(Order, :initial => 'cart') do 
      after_transition :to => 'complete', :do => :complete_order 
      before_transition :to => 'complete', :do => :process_payment 

      event :next do 
      transition :from => 'cart', :to => 'payment' 
      transition :from => 'payment', :to => 'confirm' 
      transition :from => 'confirm', :to => 'complete' 
      end 

      event :cancel do 
      transition :to => 'canceled', :if => :allow_cancel? 
      end 
      event :return do 
      transition :to => 'returned', :from => 'awaiting_return' 
      end 
      event :resume do 
      transition :to => 'resumed', :from => 'canceled', :if => :allow_resume? 
      end 
      event :authorize_return do 
      transition :to => 'awaiting_return' 
      end 

      before_transition :to => 'complete' do |order| 
      begin 
       order.process_payments! 
      rescue Spree::GatewayError 
       if Spree::Config[:allow_checkout_on_gateway_error] 
       true 
       else 
       false 
       end 
      end 
      end 

      after_transition :to => 'complete', :do => :finalize! 
      after_transition :to => 'confirm', :do => :create_tax_charge! 
      after_transition :to => 'payment', :do => :create_shipment! 
      after_transition :to => 'canceled', :do => :after_cancel 

     end 
     end 
    end 
    end 
end 

另外,我補充spree_site.rb文件到我的lib/目錄。

# lib/spree_site.rb 

module SpreeSite 
    class Engine < Rails::Engine 
    def self.activate 
     Dir.glob(File.join(File.dirname(__FILE__), "../app/**/*_decorator*.rb")) do |c| 
     Rails.configuration.cache_classes ? require(c) : load(c) 
     end 
    end 

    def load_tasks 
    end 

    config.to_prepare &method(:activate).to_proc 
    end 
end 

但是,看起來根本沒有變化。任何人都知道我應該修改哪些內容來自定義結帳流程?

請建議一些好的狂歡教程或建議。我真的很感激任何意見。

預先感謝您。

回答

4

您需要位於Spree命名空間內,覆蓋Spree :: Order而不是簡單的Order。

+0

感謝您的評論,我會狂歡的命名空間中的嘗試。謝謝。 – user1431177

2

我認爲你的訂單修飾應該看起來有點不同。 只是做一個文件app/models/spree/order_decorator.rb

並啓動它是這樣的

Spree::Order.class_eval do 
    state_machine do 
    before_transition to: "address" do |order| 
    ... 
    end 
end