Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 如何定制Spree签出过程?_Ruby On Rails_Ruby_Spree - Fatal编程技术网

Ruby on rails 如何定制Spree签出过程?

Ruby on rails 如何定制Spree签出过程?,ruby-on-rails,ruby,spree,Ruby On Rails,Ruby,Spree,我的环境 Mac OSX 10.7.4 Ruby 1.9.3p0 Rails 3.2.3 Spree 1.1.0 你好,我是日本程序员和菜鸟狂欢。我想定制Spree的结帐流程,以删除结帐步骤,例如选择交货方式和付款方式 根据,我需要为Order模型定义一个全新的状态机 因此,我将order\u decorator.rb添加到app/models目录中,如下所示 # app/models/order_decorator.rb module SpreeCustomExtension clas

我的环境

Mac OSX 10.7.4
Ruby 1.9.3p0
Rails 3.2.3
Spree 1.1.0
你好,我是日本程序员和菜鸟狂欢。我想定制Spree的结帐流程,以删除结帐步骤,例如选择交货方式和付款方式

根据,我需要为
Order
模型定义一个全新的状态机

因此,我将
order\u decorator.rb
添加到
app/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命名空间中,覆盖Spree::Order,而不仅仅是Order

我认为你的订单装饰师应该看起来有点不同。 只需创建一个文件
app/models/spree/order\u decorator.rb

然后像这样开始

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

谢谢你的评论,我将在Spree的名称空间中尝试。非常感谢。
Spree::Order.class_eval do
  state_machine do
    before_transition to: "address" do |order|
    ...
  end
end