为什么这种救援语法有效

  • 本文关键字:语法 有效 ruby rescue
  • 更新时间 :
  • 英文 :


好的,所以我有我正在使用的应用程序的这种方法,它可以在生产中工作。我的问题为什么会这样?这是新的 Ruby 语法吗?

def edit
  load_elements(current_user) unless current_user.role?(:admin)
  respond_to do |format|
    format.json { render :json => @user }   
    format.xml  { render :xml => @user }
    format.html
  end
rescue ActiveRecord::RecordNotFound
  respond_to_not_found(:json, :xml, :html)
end
rescue

方法中时不需要绑定到显式begin,这就是定义语法的方式。有关示例,请参阅此处的#19和此SO问题,以及上面的欺骗。

救援可以单独工作。 不需要总是开始和结束。

您可以使用单行形式的救援,以便在行上的其他内容出错时返回一个值:

h = { :age => 10 }
h[:name].downcase                         # ERROR
h[:name].downcase rescue "No name"  

rescue单词是方法定义的一部分

但在控制器中最好用rescue_from来挽救错误

试试这个

def edit
  begin
    load_elements(current_user) unless current_user.role?(:admin)
    respond_to do |format|
      format.json { render :json => @user }   
      format.xml  { render :xml => @user }
      format.html
    end
  rescue ActiveRecord::RecordNotFound
    respond_to_not_found(:json, :xml, :html)
  end
end

最新更新