我正在使用包含Solidus gem的RoR4应用程序。当我试图覆盖其前端的 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
我需要覆盖此方法,以便在订单完成后(结账后)执行某些操作。我有什么遗漏导致这个错误吗?或者另一种执行行动的方式?
答案 0 :(得分:0)
我认为处理这种情况的最佳方法是在模型级别使用状态机。对于此操作,可以找到更多文档here,更准确地说,使用装饰器覆盖位于order
的核心core/app/models/spree/order.rb
模型。