0

当 ActiveRecord 查询不返回结果时,如何防止我的控制器抛出错误?

 ActiveRecord::RecordNotFound in PasswordResetsController#edit
 Couldn't find User with password_reset_token = rqZEGQUH54390Pg-AUC5Q

我以为“!” 符号会产生 404 但至少在开发中,它会在浏览器中显示错误跟踪。

如果查询没有返回任何内容,下面的这个方法会在生产中产生 404 吗?

如果没有,我该如何解决?

谢谢

    def edit
      @user = user.find_by_password_reset_token!(params[:id])
    end
4

2 回答 2

2

rescue子句:

def edit
  @user = user.find_by_password_reset_token!(params[:id])
rescue ActiveRecord::RecordNotFound => e
  # Do something with error, 'e'
end

或者rescue_from在控制器中使用(可以在多个操作中重复使用:

rescue_from ActiveRecord::RecordNotFound, with: lambda do |e|
  # Do something with error, 'e'
end

def edit
  @user = user.find_by_password_reset_token!(params[:id])
end

在回答您的其他问题时,它会在生产中给出 HTTP 404 错误,但不会显示堆栈跟踪。默认情况下,它会显示一个非常基本的错误页面,说明出现问题。

于 2013-05-22T12:19:39.143 回答
0

尝试:

 class PasswordResetsController
   def edit
     ...
     begin
      @user = user.find_by_password_reset_token!(params[:id])

     rescue ActiveRecord::RecordNotFound  
      redirect_to :controller => "{Your Controller}", :action => "{Your Action}"
      return
     end
    end
   end
于 2013-05-22T12:28:23.607 回答