我的网站上有一个产品控制器,我决定在rails中使用rescue
命令,以便人们无法输入产品/ 500并获取产品的导轨错误消息不存在。这是我的代码的样子
def show
@product = Product.find(params[:id])
@title = @product.name
rescue ActiveRecord::RecordNotFound
redirect_to root_path, :notice => 'No such product'
end
但后来我看到了人们使用begin
rescue
和else
的其他一些地方。下面的代码是一个更好的做法。它有两种方式,但我想知道这两个代码之间有什么区别
def show
begin
@product = Product.find(params[:id])
rescue ActiveRecord::RecordNotFound
redirect_to root_path, :notice => 'No such product'
else
@title = @product.name
end
end
答案 0 :(得分:0)
一个隔离导致异常的东西,一个不隔离。
不确定一个人是否是“更好的做法”;我喜欢把“可能出错的东西”分开,但我发现开始/救援/其他时候看起来很笨拙,因为我必须“跳过去”看看如果不是会发生什么一个例外。不是很多,但是,好吧。
答案 1 :(得分:0)
你想要使用begin / rescue / else(以及可选的确保)的原因是你之后会做其他的事情。在您的情况下,您的第一个示例更可取。它将“快乐案例”逻辑组合在一起,这是您可能希望关注的大部分内容,但仍然清楚地说明如果发生故障将会发生什么。