最好的救援方式

时间:2016-11-30 00:35:27

标签: ruby-on-rails ruby-on-rails-4

这是在街区进行救援的正确方法吗?

此外,它是最短的吗?

JAVAC=javac
sources = $(wildcard *.java)
classes = $(sources:.java=.class)

all: myProgram

myProgram: $(classes)

%.class: %.java
    $(JAVAC) $<

jar:    
    @echo "Manifest-Version: 1.0" > manifest.txt
    @echo "Class-Path: ." >> manifest.txt
    @echo "Main-Class: Main" >> manifest.txt
    @echo "" >> manifest.txt

    jar -cmf manifest.txt JARNAME.jar $(classes)

clean:
    rm -f *.class
    rm manifest.txt

2 个答案:

答案 0 :(得分:2)

使用begin,rescue,ensure的想法是放置方法而不是在begin块中生成错误,然后你可以在一个或多个rescue块中处理错误,最后你可以为您要在成功或失败方案中执行的句子添加一个可选的ensure块,例如发布资源。

如果你想通过begin,rescue,ensure block来处理所有方法,那么begin关键字是可选的,你可以使用或不使用关键字,因为你要求最短的选项,你需要对您的代码进行一些小的更改:

def rescue_definition
  user.begin_rescue
  # and any other stuff you want to execute
  if user
    flash['success'] = 'OK'
  else
    flash['error'] = 'NO'
  end
  redirect_to :back
rescue Example::ParameterValidationError => e
  redirect_to :back, error: e.message_to_purchaser
rescue Example::ProcessingError => e
  redirect_to :back, error: e.message_to_purchaser
rescue Example::Error
  redirect_to :back, error: e.message_to_purchaser
end

如果您希望它更短,您可以在一个救援区中拯救多个异常类型:

def rescue_definition
  user.begin_rescue
  # and any other stuff you want to execute
  if user
    flash['success'] = 'OK'
  else
    flash['error'] = 'NO'
  end
  redirect_to :back
rescue Example::ParameterValidationError, Example::ProcessingError, Example::Error => e
  redirect_to :back, error: e.message_to_purchaser
end

答案 1 :(得分:0)

Aguar的帖子处理当前的实施。如果您以相同的方式处理所有错误,那么您可以让它们从自定义类继承,并通过1次救援调用将它们全部捕获。

def stuff
  user.stuff
  if user
    flash['success'] = 'Ya'
  else
    flash['error'] = 'Nah'
  end
  redirect_to ....
rescue CustomClassError => e
  redirect_to :back, error: e.message_to_purchaser
rescue NonCustomErrors => e
  #handle it
end
相关问题