13

我正在处理以下作品;

def index
  @user = User.find(params[:id]) 
  rescue
    flash[:notice] = "ERROR"
    redirect_to(:action => 'index')
  else 
    flash[:notice] = "OK"
    redirect_to(:action => 'index')
end

现在,无论我是否有正确的 ID,我总是觉得“OK”,我做错了什么?

当我在数据库中没有 ID 以显示“错误”时,我需要它。我也尝试过使用rescue ActiveRecord::RecordNotFound但同样的情况。

感谢所有帮助。

4

3 回答 3

36

只有在救援块中没有返回时,救援块结束后的所有代码才会被解释。所以你可以在你的救援块结束时调用 return 。

def index
  begin
    @user = User.find(params[:id]) 
  rescue
    flash[:notice] = "ERROR"
    redirect_to(:action => 'index')
    return
  end
  flash[:notice] = "OK"
  redirect_to(:action => 'index')
end

或者

def index
  @user = User.find(params[:id]) 
  # after is interpret only if no exception before
  flash[:notice] = "OK"
  redirect_to(:action => 'index')
rescue
  flash[:notice] = "ERROR"
  redirect_to(:action => 'index')
end

但在您的情况下,最好使用rescue_fromrescue_in_public

class UserController < ApplicationController
  def rescue_in_public(exception)
    flash[:notice] = "ERROR"
    redirect_to(:action => 'index')
  end

  def index
    @user = User.find(params[:id]) 
    flash[:notice] = "OK"
    redirect_to(:action => 'index')
  end
end

但是使用rescue_in_public并不是一个很好的建议

于 2010-04-02T14:41:16.970 回答
4

只是一个整体的 Rails Rescue 答案:

我发现这很酷:

@user = User.find(params[:id])  rescue ""
于 2014-06-20T09:20:06.777 回答
-5

如果没有user那个id,那么User.find就会返回nil。返回nil不是错误情况,也不会触发rescue.

于 2010-04-02T14:31:14.700 回答