例如,如果我尝试删除不存在的表,我将收到以下错误:
"#<ActiveRecord::StatementInvalid: PG::UndefinedTable: ERROR: relation \"aiurea\" does not exist\n
我可以使用ActiveRecord::StatementInvalid
从中拯救它,但它对我来说太通用了;我想只在底层错误为PG::UndefinedTable
时进行救援。我怎么能这样做?
P.S。:我看到error.cause
导致潜在的错误,但我不确定这是否是“公共”界面,并且它是一种不显眼的方式来实现它。
答案 0 :(得分:3)
2018更新:
ex.original_exception
被deprecated赞成ex.cause
。这对我有用:
rescue ActiveRecord::StatementInvalid => ex
if ex.cause.is_a?(PG::UndefinedTable)
# do something
else
raise ex
end
end
答案 1 :(得分:2)
Inner Join
是一种特殊的错误类型,其中封装了其他错误。您可以使用ActiveRecord::StatementInvalid
来访问原始版本:
.original_exception
更好的方法是:
rescue ActiveRecord::StatementInvalid => ex
ex.original_exception # this will return the `PG::UndefinedTable` class, which you can further inspect.
end
答案 2 :(得分:0)
这样的事情应该有效
rescue ActiveRecord::StatementInvalid => ex
if ex.message =~ /PG::UndefinedTable/
// Do stuff here
else
raise ex
end
end