在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
我认为第二种方法本身就足够了。我认为,如果发生任何意外情况或事务中的任何逻辑错误,事务本身将回滚,我们可以抓住它们并做我们想做的任何事情。是否在事务中捕获异常并在任何地方手动提升回滚?两种方法之间有什么区别?
您不需要手动回滚事务,下面的代码应该足够好
def update
ActiveRecord::Base.transaction do
foo.update(foo_update_params)
end
rescue ActiveRecord::RecordInvalid
# Handle your exception here
end
看看here以获得更好的解释。