簡體   English   中英

Ruby on Rails:我如何捕獲ActiveRecord :: Rollback?

[英]Ruby on Rails: how do I catch ActiveRecord::Rollback?

在我的控制器中,我的代碼如下所示:

    @mymodel.transaction do 
      for a in arr
        @mymodel.some_method(a)
      end
    end

在@ mymodel#some_method我可以拋出一個ActiveRecord::Rollback異常,它在db中做它需要做的事情,但是我只是得到一個HTTP 500並且無法捕獲異常以讓用戶以優雅的方式知道什么出錯。

我試過在開始/救援塊中包裝@ mymodel.transaction do,但是也不會這樣做。 捕獲異常的最佳方法是什么,以便為用戶提供正確的視圖?

ActiveRecord::Base文檔:

通常,引發異常將導致transaction方法回滾數據庫事務傳遞異常。 但是,如果引發ActiveRecord :: Rollback異常,則將回滾數據庫事務,而不傳遞異常。

一個小例子:

class ThrowController < ApplicationController
  def index
      status = ActiveRecord::Base.connection.transaction do
        raise ActiveRecord::Rollback.new
      end

      Rails.logger.info "followed transaction"
  end
end

然后:

>> c = ThrowController.new.index
=> "followed transaction \n"

如您所見, transaction塊吞下了ActiveRecord:::Rollback異常。

在我看來,我們還沒有意識到你的代碼正在發生的其他事情。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM