如何突破Ruby中的开始块?

时间:2014-01-09 21:08:44

标签: ruby program-flow

如何突破开始区块并跳转到救援区?

def function
  begin
    @document = Document.find_by(:token => params[:id])
    next if @document.sent_at < 3.days.ago # how can I skip to the rescue block here?
    @document.mark_as_viewed
  rescue
    flash[:error] = "Document has expired."
    redirect_to root_path
  end
end

我使用next的尝试不起作用。

1 个答案:

答案 0 :(得分:8)

好吧,你可能会提出错误。这就是开始/救援块的工作方式。但这并不是一个好主意 - 使用业务逻辑的错误处理通常是不受欢迎的。

似乎将重构作为一个简单的条件更有意义。类似的东西:

def function
  @document = Invoice.find_by(:token => params[:id])
  if @document.sent_at < 3.days.ago
    flash[:error] = "Document has expired."
    redirect_to root_path
  else
    @document.mark_as_viewed 
  end
end

似乎你在这里混淆了几种与块相关的关键词:

错误处理(begin / rescue / end)适用于您认为某些内容可能引发错误并以特定方式对其做出响应的情况。

next用于迭代 - 当你循环一个集合并想跳到下一个元素时。

条件(ifunlesselse等)是检查某些事物的状态并根据它执行不同代码的常用方法。