`
s8186255
  • 浏览: 87246 次
  • 性别: Icon_minigender_1
  • 来自: 新疆乌鲁木齐
社区版块
存档分类
最新评论

全局范围内捕捉错误

阅读更多

     使用begin rescue else end这种句法是ruby编程的常用方法。但是每个在涉及到查询的过程中都需要使用这个繁杂的语句,简直让人崩溃。

     不让人崩溃的方法就是如何写一遍,可以让所有的凡是可能碰到类似错误的action都可以一种优雅的方式提示错误。这就是我们的目标。

     通过搜索,看到rescue_from这个rails定义的方法,再通过console查询,发现它在ActionController模块的Base类中。它可以捕捉action执行过程中的错误。

     如果是查不着记录,比如使用find(5),这样的语句,如果模型中没有这条记录,则会出现ActiveRecord::Error not found error这样的错误,这种错误,我们可以在application_controller这个全局控制器中定义这样一个拯救方法:

rescue_from ActiveRecord::RecordNotFound, :with => :record_not_found

或者如果发生路由错误,我们可以再增加一个rescue_from

rescue_from ActionController::RoutingError,:with=> :record_not_found


说明:

1、rescue_from后面第一个参数是错误类型,随着逐步了解rails的错误体系,可以在这里写更多的rescue,直到你消灭所有不可控的错误。

2、第二个参数是一个hash,record_not_found是一个处理方法,也就是错误来了,我要干什么。

简单定义record_not_found如下,最好放在protected或者private下:

def record_not_found

render :text=>'呵呵,你怎么又出错了'

end


这样做了以后,我们的action中就可以大胆的使用find(id)这样的语句,二不怕出错,或者当用户在url中进行任意篡改的时候,我们也心中有数,不至于使用public目录下的错误提醒代码,用红色message吓坏使用者了。



0
0
分享到:
评论
1 楼 wejaylyn 2011-03-18  
貌似rails 3.0.x里的scue_from ActionController::RoutingError是不成功的,会在rails 3.1里修复;但是我在试的时候AbstractController::ActionNotFound也不会捕获成功,不知到神马情况

相关推荐

    DotNet MVC中实现错误捕捉实现的C#源代码

    这个事件会在全局范围内捕获未处理的异常。例如: ```csharp protected void Application_Error(object sender, EventArgs e) { var exception = Server.GetLastError(); // 记录日志 LogError(exception); ...

    Flutter错误捕捉和处理插件

    此外,Flutter还提供了`runZoned`函数,可以在全局范围内捕获未处理的异常: ```dart runZoned<Future<void>>(() async { // 应用程序代码 }, onError: (error, stackTrace) { // 处理错误 }); ``` 然而,这些...

    全局钩子实现键盘监控

    全局钩子可以在整个系统范围内生效,不仅限于创建它的进程,可以监听所有进程中指定类型的事件。 在本项目中,主要使用了键盘钩子(Keyboard Hook),它是一种特殊的钩子,用于拦截键盘输入事件。当用户按下或释放...

    .net中捕捉全局未处理异常的三种方式示例

    `Application_Error`方法在Global.asax文件中定义,可以捕获整个应用程序范围内的所有未处理异常。它是最通用的全局异常处理方式,因为它会处理所有页面和HttpModule未能捕获的异常: ```csharp void ...

    AndroidCrash全局崩溃异常捕获

    8. **异常分类与优先级**: 对捕获的异常进行分类和标记优先级,可以帮助开发者更有效地分配资源,优先解决影响范围广或频率高的问题。 9. **异常处理策略**: 不同类型的异常可能需要不同的处理方式。例如,对于可...

    全局鼠标钩子DLL源码及调用源码

    全局鼠标钩子(WH_MOUSE_LL)是低级钩子的一种,可以在整个系统范围内设置,无论焦点窗口为何,都能捕捉到鼠标事件。 源码中包含的主要部分可能包括以下几点: 1. **DLL文件**:这是一个动态链接库,包含了实现...

    jscript错误代码解释大全

    - `EvalError`:`eval()`函数使用不当,如尝试在非全局作用域内使用`eval()`。 3. **错误处理**:JavaScript提供了`try...catch`语句来捕获并处理错误。在`try`块中放置可能抛出错误的代码,如果出现错误,`catch`...

    C#如何在后台捕捉按键

    本示例中,我们关注的是如何使用`RegisterHotKey`函数来定义和监听系统范围内的热键。 `RegisterHotKey`函数是Windows API的一部分,它允许你的应用程序定义一个热键组合,即使你的应用程序窗口不是焦点,也可以...

    asp.net错误捕获(错误处理)page_error事件使用方法

    `Application_Error` 事件在全局.asax 文件中定义,可以捕获整个应用程序范围内的错误。这种方式适用于那些需要在整个应用程序中统一处理错误的情况。另外,通过配置 Web.config 文件,可以设置不同错误类型的全局...

    全局鼠标和键盘库

    全局鼠标挂钩允许开发者监听并处理系统范围内的鼠标事件,如鼠标移动、点击、滚动等,而不局限于应用程序的窗口。这在开发需要全局监控用户鼠标的软件时非常有用,例如屏幕监控、游戏辅助工具或者自动化脚本。 全局...

    前端监控系统的设计

    10. 全局try/catch的使用:在应用的全局范围内使用try/catch能够捕捉到未被捕获的异常,但是它也可能捕获到一些意料之外的错误,需要根据实际情况进行调整。 11. 具体问题具体分析:监控到的数据需要结合具体问题...

    如何在C#中记录Javascript错误

    在全局范围内,我们可以监听`window.onerror`事件,这会在任何未捕获的JavaScript错误发生时触发。以下是一个简单的示例: ```javascript window.onerror = function(errorMessage, fileName, lineNumber, column...

    Laravel开发-airbrake-laravel .zip

    要在全局范围内使用,将 `Airbrake\Laravel\Middleware\ReportException` 添加到 `app/Http/Kernel.php` 的 `$middleware` 数组。 6. **自定义错误处理** 如果需要,你可以扩展 Airbrake 的默认行为,例如忽略某些...

    BugTrap - C++程序崩溃堆栈信息收集

    3. **捕获异常**:一旦初始化完成,BugTrap会在全局范围内监控程序,当检测到未处理的异常时,它会立即激活,收集堆栈信息和其他相关数据。 4. **收集信息**:BugTrap会收集诸如崩溃时的内存快照、进程信息、系统...

    pdms二次开发.pptx

    3. 全局变量与局部变量:PML语言中,变量可以定义为全局变量或局部变量,全局变量可以在任何地方访问,局部变量只能在定义的范围内访问。 4. 特殊的全局变量!!ce:!!ce是一种特殊的全局变量,用于存储当前_PDMS系统...

    TimesTen ODBC 应用开发PPT课件.pptx

    * 变量申明应该在程序开始的时候进行,并且属于全局范围的。 * 如果使用到多线程,变量申明应该在线程内部。 本资源摘要信息对 TimesTen ODBC 应用开发进行了详细的介绍,涵盖了 ODBC 程序结构、使用 ODBC 句柄、...

    脚本与数据,特别是SQSERVER

    "脚本与数据,特别是SQSERVER" 概述:本资源是关于使用VBScript连接数据库的公共函数,提供了连接不同类型数据库的方法,包括ORACLE...* 如果在全局范围内创建了ADODB对象,那么该对象的生命周期将结束于脚本的结束。

    WindowsHook易核心编程.pdf

    Windows钩子(Windows Hook)是Windows操作系统提供的一种消息处理机制,用于在一个全局范围内对系统消息进行捕捉和处理。开发者可以使用钩子来监控系统或应用程序的某些特定类型的消息,以实现诸如键盘记录、消息...

Global site tag (gtag.js) - Google Analytics