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