导轨救援功能

时间:2011-10-21 04:55:33

标签: ruby ruby-on-rails-3 activerecord

我的网站上有一个产品控制器,我决定在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 rescueelse的其他一些地方。下面的代码是一个更好的做法。它有两种方式,但我想知道这两个代码之间有什么区别

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

2 个答案:

答案 0 :(得分:0)

一个隔离导致异常的东西,一个不隔离。

不确定一个人是否是“更好的做法”;我喜欢把“可能出错的东西”分开,但我发现开始/救援/其他时候看起来很笨拙,因为我必须“跳过去”看看如果不是会发生什么一个例外。不是很多,但是,好吧。

答案 1 :(得分:0)

你想要使用begin / rescue / else(以及可选的确保)的原因是你之后会做其他的事情。在您的情况下,您的第一个示例更可取。它将“快乐案例”逻辑组合在一起,这是您可能希望关注的大部分内容,但仍然清楚地说明如果发生故障将会发生什么。