5

好的,所以我有我正在使用的应用程序的这种方法,它可以在生产中使用。我的问题为什么这行得通?这是新的 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
4

4 回答 4

13

rescues 在方法中时不需要绑定到显式begin,这就是定义语法的方式。例如,请参阅此处的 #19这个 SO question以及上面的欺骗

于 2012-04-10T13:06:31.290 回答
2

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

当在线上的其他事情出错时,您可以使用救援单行形式返回一个值:

h = { :age => 10 }
h[:name].downcase                         # ERROR
h[:name].downcase rescue "No name"  
于 2012-04-10T13:11:49.403 回答
0

rescue词是方法定义的一部分

但在控制器中更好地挽救错误rescue_from

于 2012-04-10T12:57:22.847 回答
-3

试试这个

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
于 2012-04-10T13:01:30.757 回答