【问题标题】:Solidus / Spree + Override checkout controllerSolidus / Spree + Override 结账控制器
【发布时间】:2016-03-27 19:51:36
【问题描述】:

我正在开发我的 RoR4 应用程序,其中包含 Solidus gem。当我试图覆盖其前端的 checkout_controller#update 方法时(位于 here)。

我根据Spree's documents覆盖了控制器,但它给了我一个uninitialized constant OrderUpdateAttributes的错误。

CheckoutController#update 命名为/app/controllers/spree/checkout_controller_decorator.rb

Spree::CheckoutController.class_eval do
  def update
   if OrderUpdateAttributes.new(@order, update_params, request_env: request.headers.env).apply
     @order.temporary_address = !params[:save_user_address]
     success = if @order.state == 'confirm'
        @order.complete
     else
        @order.next
     end
     if !success
       flash[:error] = @order.errors.full_messages.join("\n")
       redirect_to(checkout_state_path(@order.state)) && return
     end

     if @order.completed?
       @current_order = nil
       flash.notice = Spree.t(:order_processed_successfully)
       flash['order_completed'] = true
       redirect_to completion_route
     else
       redirect_to checkout_state_path(@order.state)
     end
  else
    render :edit
  end
end

我需要重写此方法,以便在订单完成后(结帐后)执行一些操作。我是否缺少导致此错误的东西?还是以其他方式执行操作?

【问题讨论】:

    标签: ruby-on-rails-4 overriding e-commerce spree


    【解决方案1】:

    我认为处理这种情况的最佳方法是在模型级别使用状态机。对于此操作,可以在here 找到更多文档,更准确地说是使用装饰器覆盖位于core/app/models/spree/order.rb 上的核心order 模型。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多