3

コントローラcheckout_controller.rbからのメソッドrescue_from_spree_gateway_errorをオーバーライドする必要があります

私のゲートウェイはこれを返します:

Gateway Error   --- !ruby/object:ActiveMerchant::Billing::Response params:   success: false   order_status:    message: Autoriza��o negada   amount:    order:    transaction:  message: Autoriza��o negada success: false test: false authorization:  fraud_review:  avs_result:   code:    message:    street_match:    postal_match:  cvv_result:   code:    message:


これは私のオーバーライドです。/app/controllers/checkout_controller_decorator.rb

module Spree
  CheckoutController.class_eval do
    def rescue_from_spree_gateway_error(error)
      puts "==========================================="
      flash[:error] = error.message
      render :edit
    end
  end
end


putsコンソールに表示できるように追加しましたが、印刷されませんでした。


また、メソッド宣言の上に別のものを追加putsし、サーバーを起動すると出力されます。

=> Booting WEBrick
=> Rails 3.2.13 application starting in development on http://0.0.0.0:3000
=> Call with -d to detach
=> Ctrl-C to shutdown server
!!!!!THIS IS ABOVE THE METHOD!!!!! [2013-09-05 16:33:31] INFO  WEBrick 1.3.1 [2013-09-05 16:33:31] INFO  ruby 1.9.3 (2013-06-27) [x86_64-linux] [2013-09-05 16:33:31] INFO  WEBrick::HTTPServer#start: pid=21635 port=3000


したがって、クラスがロードされていることを示していますが、上記のエラーのようにメソッドが呼び出されることActiveMerchant::Billing::Responseはありません。ゲートウェイエラーではありません。


には、発生checkout_controller時にメソッドを呼び出す次の行があります。GatewayError

rescue_from Spree::Core::GatewayError, :with => :rescue_from_spree_gateway_error
4

2 に答える 2

2

キャッチしようとしている例外は、以前にキャッチされています。ほぼ確実にここに:

https://github.com/spree/spree/blob/v2.0.4/core/app/models/spree/order.rb#L443

探しているロジックを追加するには、その関数をオーバーライドする必要があります。

于 2013-09-06T15:45:19.317 に答える