2016-01-08 86 views
3

如果我嘗試,例如,降不存在的表,我會收到以下錯誤:救援PG :: UndefinedTable代替的ActiveRecord :: StatementInvalid

"#<ActiveRecord::StatementInvalid: PG::UndefinedTable: ERROR: relation \"aiurea\" does not exist\n 

我可以從中解救使用ActiveRecord::StatementInvalid,但它對我來說太普通;我想只有在潛在錯誤是PG::UndefinedTable時才能解救。我怎樣才能做到這一點?

P.S .:我看到error.cause導致潛在的錯誤,但我不確定這是否是「公共」接口,它是一個不顯眼的方式去實現它。

+1

事業法發佈的API的一部分http://ruby-doc.org/core-2.2.0/Exception.html#method-i-cause所以我認爲這是公開的......儘可能多。 – Tim

+0

但是然後我需要拯救'ActiveRecord :: StatementInvalid'並且在裏面有一個條件來查找原因是否是'PG :: UndefinedTable'。是不是我可以直接指定'救援' – linkyndy

回答

0

像這樣的東西應該工作

rescue ActiveRecord::StatementInvalid => ex 
    if ex.message =~ /PG::UndefinedTable/ 
    // Do stuff here 
    else 
    raise ex 
    end 
end 
+0

確實,但你必須同意它的醜陋。沒有其他方法嗎? – linkyndy

相關問題