【发布时间】:2023-03-11 16:36:01
【问题描述】:
我需要从控制器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
【问题讨论】:
-
可能是因为核心中的方法没有参数,而你的方法有参数?
-
我真的不知道,我在听邮件组用户的一个建议:groups.google.com/forum/#!topic/spree-user/rRcIoDs-9Dc
-
@zrl3dx 我刚刚试了一下,删除了参数并硬编码了消息
flash[:error] = "Not authorized",什么也没发生=/ -
尝试将其放入
app/controllers/spree而不是app/controllers,AFAIK 装饰器的功能与路径(以及文件名)严格相关。 -
@zrl3dx 没有成功 =/
标签: overriding checkout spree