2014-02-06 21 views
0

在Sequel中使用交易時,您應該能夠引發異常並使其從交易塊中跳出。續集交易包裝異常而不是重新註冊

從續集文檔:

如果任何其他異常升高時,事務回滾,並引發異常外塊:

DB.transaction do # BEGIN 
    raise ArgumentError 
end # ROLLBACK 
# ArgumentError raised 

然而,似乎自從Sequel把它包裝在Sequel::DatabaseError

begin 
    DB.transaction do 
    raise ArgumentError.new('Hey') 
    end 
rescue => e 
    puts e.inspect 
    puts e.kind_of?(ArgumentError) 
end 
後,我無法趕上

結果:

> #<Sequel::DatabaseError: ArgumentError: Hey> 
> false 

我該如何解決這個問題?

+0

這項工作? 'puts e.message ['ArgumentError'] =='ArgumentError'' –

+0

是的,但是它很糟糕,如果異常是深層次結構的一部分,它會擾亂異常流程,所以我寧願避免這種解決方案。 – Seralize

+0

然後'把e.message =='Hey''?應該工作。它可以幫助你理解錯誤的來源。 –

回答

1

您可以嘗試使用wrapped_exception作爲記錄here並重新提出異常。

begin 
    DB.transaction do 
    raise ArgumentError.new('Hey') 
    end 
rescue Sequel::DatabaseError => e 
    raise e.wrapped_exception 
end