全局范围内捕捉错误_Ruby_编程开发_程序员俱乐部

中国优秀的程序员网站程序员频道CXYCLUB技术地图
热搜:
更多>>
 
您所在的位置: 程序员俱乐部 > 编程开发 > Ruby > 全局范围内捕捉错误

全局范围内捕捉错误

 2010/11/17 22:56:57  s8186255  http://s8186255.javaeye.com  我要评论(0)
  • 摘要:使用beginrescueelseend这种句法是ruby编程的常用方法。但是每个在涉及到查询的过程中都需要使用这个繁杂的语句,简直让人崩溃。不让人崩溃的方法就是如何写一遍,可以让所有的凡是可能碰到类似错误的action都可以一种优雅的方式提示错误。这就是我们的目标。通过搜索,看到rescue_from这个rails定义的方法,再通过console查询,发现它在ActionController模块的Base类中。它可以捕捉action执行过程中的错误。如果是查不着记录,比如使用find(5)
  • 标签:全局捕捉错误

???? 使用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吓坏使用者了。



  • 相关文章
发表评论
用户名: 匿名