ruby-on-rails – 在哪里以及如何处理rails异常?
发布时间:2020-12-17 04:03:24 所属栏目:百科 来源:网络整理
导读:我目前正在开发一个大型rails应用程序,它通过自定义API gem与另一个产品连接.这导致了一种非常奇怪的错误捕获.例如,当我们与其他产品交互时,它可能会返回我们期望的身份验证错误.然后我们在API gem中捕获该错误并抛出异常,然后在视图中捕获并转发给用户. 我
我目前正在开发一个大型rails应用程序,它通过自定义API gem与另一个产品连接.这导致了一种非常奇怪的错误捕获.例如,当我们与其他产品交互时,它可能会返回我们期望的身份验证错误.然后我们在API gem中捕获该错误并抛出异常,然后在视图中捕获并转发给用户.
我不喜欢这种错误捕获方法,原因如下: >似乎我们不应该期待异常并在我们的逻辑中使用它们.例如,有时我们想要覆盖一个对象 – 所以我们捕获“对象已存在”异常并继续保存我们的模型. 那就是说,我应该充实API gem以获得不会抛出异常的更简单的函数吗?是 if user.has_permission_in_product? if object.doesnt_exist_in_product? do something else redirect somewhere with errors end else redirect somewhere else with errors end 最好的 begin do something rescue APIError => e if e.message =~ "no permission" redirect somewhere with errors elsif e.message =~ "already exists" redirect somewhere else with errors end end 此外,如果第一个更好,我们如何处理可能在这些函数中抛出的实际API错误?我们是否将它们鼓泡到控制器中的rescue_from中? 捕获和处理模型中的异常,或者将它们放入模型并在控制器中处理它们是否更好? 解决方法
你在寻找
rescue_from吗?
在控制器中,执行以下操作: class MyController < ApplicationController rescue_from ActiveRecord::RecordNotFound,:with => :render_missing def render_missing render 'This is a 404',:status => 404 end end 每次引发ActiveRecord :: RecordNotFound异常时,这将执行render_missing方法. 当然,模型中引发的任何异常也可能被rescue_from捕获. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |