2012-06-02 3 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 

또한, 나는 내 lib/ 디렉토리에 spree_site.rb 파일을 추가했다.

# 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를 재정의해야합니다.

+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 
관련 문제