【发布时间】:2020-02-26 06:27:15
【问题描述】:
为了让我的程序按预期工作,rescue_from 的顺序并不直观。我想知道为什么会这样或者我哪里出错了?
我正在尝试这个错误处理解决方案。
我的错误处理程序与github repo中的相同
module Error
module ErrorHandler
def self.included(clazz)
clazz.class_eval do
rescue_from ActiveRecord::RecordNotFound do |e|
respond(:record_not_found, 404, e.to_s)
end
rescue_from CustomError do |e|
respond(e.error, e.status, e.message.to_s)
end
rescue_from StandardError do |e|
respond(:standard_error, 500, e.to_s)
end
end
end
这导致我的错误总是被捕获在StandardError 块中,跳过ActiveRecord::RecordNotFound 和Custom 错误块。
但是,如果我切换顺序(StandardError 在执行中更高),它会正确捕获其他类型的错误。
def self.included(clazz) #includes module as a class method
clazz.class_eval do
rescue_from StandardError do |e|
respond(:standard_error, 500, e.to_s)
end
rescue_from ActiveRecord::RecordNotFound do |e|
respond(:record_not_found, 404, e.to_s)
end
rescue_from CustomError do |e|
respond(e.error, e.status, e.message.to_s)
end
end
end
为什么在顶部设置 StandardError 会起作用?
【问题讨论】:
标签: ruby-on-rails ruby exception error-handling module