2016-03-27 27 views
0

Ich arbeite an meiner RoR4 App mit dem Solidus Juwel. Als ich versuchte, seine Frontend checkout_controller # update Methode zu überschreiben (befindet sich here).Solidus/Spree + Checkout-Controller außer Kraft setzen

Ich überschreibe den Controller nach Spree's documents, aber es gab mir einen Fehler von uninitialized constant OrderUpdateAttributes.

CheckoutController#update als /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 
namens

ich diese Methode, um außer Kraft zu setzen benötigen eine Aktion, nachdem ein Auftrag abgeschlossen ist auszuführen (nach der Kasse). Gibt es etwas, das mir fehlt, um diesen Fehler zu verursachen? Oder eine andere Art, die Aktion auszuführen?

Antwort

0

Ich dachte, der beste Weg, um mit dieser Situation umzugehen, besteht darin, die Zustandsmaschine auf Modellebene zu verwenden. Für diese Aktion kann mehr Dokumentation here gefunden werden, und genauer, den Dekorator zu verwenden, um auf order des Kerns zu überschreiben, das sich auf core/app/models/spree/order.rb befindet.

Verwandte Themen