处理rails中的异常

问题描述 投票:0回答:1

在rails中使用Active记录事务时,我有点不清楚异常处理。我见过很多人用过,

方法:1

def update
  ActiveRecord::Base.transaction do
    begin
      # Some logic
    rescue StandardError => e
      raise ActiveRecord::Rollback
    end
  end
end

并且在许多地方看过以下逻辑。

方法:2

def update
  ActiveRecord::Base.transaction do
   if object.update(update_params)
     # success
   else
     # error handling
    end
  end

rescue => e
  # error handling
end

我认为第二种方法本身就足够了。我认为,如果发生任何意外情况或事务中的任何逻辑错误,事务本身将回滚,我们可以抓住它们并做我们想做的任何事情。是否在事务中捕获异常并在任何地方手动提升回滚?两种方法之间有什么区别?

ruby-on-rails activerecord transactions ruby-on-rails-5 rollback
1个回答
0
投票

您不需要手动回滚事务,下面的代码应该足够好

def update

  ActiveRecord::Base.transaction do
    foo.update(foo_update_params)
  end

rescue ActiveRecord::RecordInvalid
  # Handle your exception here
end

看看here以获得更好的解释。

© www.soinside.com 2019 - 2024. All rights reserved.