[英]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.