【问题标题】:Handling exceptions in rails处理 Rails 中的异常
【发布时间】:2019-03-16 15:26:30
【问题描述】:

在 Rails 中使用 Active Record 事务时,我对异常处理有点不清楚。我见过他们中的许多人使用,

方法: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】:

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

    def update
    
      ActiveRecord::Base.transaction do
        foo.update(foo_update_params)
      end
    
    rescue ActiveRecord::RecordInvalid
      # Handle your exception here
    end
    

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多