在Rails中使用救援工作

时间:2010-04-02 14:28:10

标签: ruby-on-rails ruby rescue

我正在使用以下内容;

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

现在无论我是否拥有正确的身份证,我的观点总是“好”,我做错了什么?

当我在DB中没有ID显示“ERROR”时,我需要这样做。我也试过使用rescue ActiveRecord::RecordNotFound,但同样的事情发生了。

感谢所有帮助。

3 个答案:

答案 0 :(得分:33)

仅当救援块中没有返回时,才解释救援块结束后的所有代码。所以你可以在救援区结束时给他们打电话。

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并不是一个很好的建议

答案 1 :(得分:4)

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

我觉得这很酷:

@user = User.find(params[:id])  rescue ""

答案 2 :(得分:-5)

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