ruby-on-rails - 拯救 PG::UndefinedTable 而不是 ActiveRecord::StatementInvalid

标签 ruby-on-rails postgresql exception activerecord

例如,如果我尝试删除一个不存在的表,我将收到以下错误:

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

我可以使用 ActiveRecord::StatementInvalid 来解决这个问题,但它对我来说太通用了;我只想在底层错误是 PG::UndefinedTable 时进行救援。我该怎么做?

P.S.:我看到 error.cause 导致了潜在的错误,但我不确定这是否是“公共(public)”接口(interface)以及它是否是一种不引人注目的方式。

最佳答案

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

关于ruby-on-rails - 拯救 PG::UndefinedTable 而不是 ActiveRecord::StatementInvalid,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34673364/

相关文章:

python - 当 pytest 测试断言查询结果 rowcount 失败时数据库操作挂起

ruby-on-rails - 正确安装 pg gem 时出现问题

java - 从 java 任务抛出异常不起作用

ruby-on-rails - Rails 5 找不到模板错误

ruby-on-rails - 使用 Arel 或 ActiveRecord 以编程方式组合 INTERSECT 和 UNION 查询

ruby-on-rails - BlueCloth 无法与 Rails 3 配合使用

java - 重写接口(interface)方法时删除 Java 检查异常?

ruby-on-rails - Rails 唯一性约束和空列的匹配数据库唯一索引

mysql - 如何为许多用户的网站生成唯一代码

Ruby NameError 未定义的局部变量或方法`e