2016-03-27 22 views
0

私はSolidus gemが入ったRoR4アプリを開発中です。フロントエンドのcheckout_controller#updateメソッド(hereにあります)をオーバーライドしようとしました。Solidus/Spree +オーバーライドチェックアウトコントローラー

コントローラーをSpree's documentsに従ってオーバーライドしましたが、エラーはuninitialized constant OrderUpdateAttributesでした。私は注文が完了した後に(そのチェックアウトした後に)いくつかのアクションを実行するために、このメソッドをオーバーライドするために必要な/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 

として名前

CheckoutController#update。このエラーの原因となるものがありますか?またはアクションを実行する別の方法は?

答えて

0

この状況を処理する最善の方法は、モデルレベルでステートマシンを使用することです。このアクションのために、より多くのドキュメントが見つかりましたhere、より正確には、core/app/models/spree/order.rbにあるコアのorderモデルでデコレータを使用してオーバーライドします。