我有一个Rails 6应用程序
class PostsController
rescue_from MyException, :handle_my_exception
around_action :my_around_action
def create
Rails.logger.info "Executing create code"
raise MyException.new("Error Message!")
end
def my_around_action
Rails.logger.info "Executing my_around_action"
yield
ensure
Rails.logger.info "Inside ensure block of my_around_action"
end
def handle_my_exception(e)
Rails.logger.info "Inside Handle My Exception"
end
end
字符串
调用createaction后,我得到如下顺序的输出
Executing my_around_action
Executing create code
Inside ensure block of my_around_action
Inside Handle My Exception
型
但我希望按这个顺序输出。
Executing my_around_action
Executing create code
Inside Handle My Exception
Inside ensure block of my_around_action
型
我该怎么办?我必须用救援工具来做干燥的用途。下面是我试图克服的问题,但我正在寻找解决它使用rescue_from.
class PostsController
# rescue_from MyException, :handle_my_exception
around_action :my_around_action
def create
Rails.logger.info "Executing create code"
raise MyException.new("Error Message!")
rescue MyException => e
handle_my_exception(e)
end
def my_around_action
Rails.logger.info "Executing my_around_action"
yield
ensure
Rails.logger.info "Inside ensure block of my_around_action"
end
def handle_my_exception(e)
Rails.logger.info "Inside Handle My Exception"
end
end
型
当我手动处理异常时,它会以正确的顺序输出,但当我尝试使用rescue_from时,它不会以正确的顺序输出。
3条答案
按热度按时间vyswwuz21#
只需将
rescue
放入around handler中:字符串
wqlqzqxt2#
您的解决方案正是您在陈述时所要求的:“但我想要按这个顺序输出."。当然,这是一个很好的解决方案,甚至比
rescue_from
更好。xwbd5t1u3#
从确保代码块中取出代码并将其 Package 到lambda中怎么样?
MyException
可以更改一点,以便稍后可以使用$!
在handle_my_exception
方法中存储lambda访问它个字符