2016-03-27 3 views
0

Я работаю над своим приложением RoR4 с включенным драгоценным камнем Solidus. Когда я попытался переопределить метод checkout_controller # update своего внешнего интерфейса (расположен here).Solidus/Spree + Override checkout controller

Я переопределяю контроллер в соответствии с 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 

мне нужно переопределить этот метод для того, чтобы выполнить какое-либо действие после того, как заказ будет завершен (после ее проверки). Есть ли что-то, что мне не хватает, чтобы вызвать эту ошибку? Или другой способ выполнить действие?

ответ

0

Я понял, что лучший способ справиться с этой ситуацией - использовать машину состояний на уровне модели. Для этого действия можно найти дополнительную документацию here, а точнее использовать декоратор для переопределения на модели ядра order, расположенной по адресу core/app/models/spree/order.rb.