如何突破开始区块并跳转到救援区?
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
的尝试不起作用。
答案 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
用于迭代 - 当你循环一个集合并想跳到下一个元素时。
条件(if
,unless
,else
等)是检查某些事物的状态并根据它执行不同代码的常用方法。