【问题标题】:How to include Custom exception in Rails?如何在 Rails 中包含自定义异常?
【发布时间】:2014-12-20 14:26:07
【问题描述】:

我不太明白 Rails 如何包含(或不包含)应用目录中的某些文件。

例如,我创建了一个新目录 app/exceptions 来创建我自己的异常。现在,从帮助文件中,我想提出我的一个例外。

我想在这个助手中包含一些东西吗?

助手:helpers/communications_helper.rb

//should I include something or it's suppose to be autoloaded?
module CommunicationsHelper
 begin.
 .
 . 
 .
  raise ParamsException, "My exception is lauch!"
 rescue StandardError => e
...
 end
end

异常:exceptions/params_exception.rb

class ParamsException < StandardError
  def initialize(object, operation)
    puts "Dans paramsException"
  end

end

我在输出中的加注没有任何具体内容...

谢谢!

编辑: 感谢所有人,您的两个答案以不同的方式有所帮助。 我没有像你说的那样很好地提出异常,但我也忘了更新我的 config.rb。 所以现在我已经:

rescue StandardError => e
  raise ParamsError.new("truc", "truc")

其他问题,你知道我在哪里可以得到加薪吗? 因为我已经在一个 catch 块中,所以我有点迷路......

【问题讨论】:

  • 我建议创建一个单独的控制器,并将错误路由到它。它看起来很简单。

标签: ruby-on-rails ruby


【解决方案1】:

如果您没有看到来自 raise 的输出,请确保您没有意外地挽救错误,因为您的错误是 StandardError 的子类:

begin
  raise ParamsException, "My exception is lauch!"
rescue StandardError => e # This also rescues ParamsException
end

附带说明一下,在 Ruby 中,通常的做法是让您的自定义错误以 Error 而不是 Exception 结尾。与其他一些编程语言不同,以Exception 结尾的类是针对系统级错误的。

【讨论】:

  • Rails 应该自动加载 app 子目录中的所有内容
  • 我也听说过,所以你认为我不必添加 config.autoload_paths += %W(#{config.root}/app/exceptions) 行?
  • @JulienLeray 我也测试过,只是为了验证。您确实不必将app 的子目录添加到自动加载路径。如果加载失败,您肯定会看到 LoadError,因为您的代码中没有救出那个。
【解决方案2】:

首先,我认为您错误地提出了异常。

在您的自定义异常类中,您的初始化方法接受参数。因此,您应该提出:

raise CustomError.new(arg1, arg2, etc.)

Read this.

最后,如果 CustomError 是 StandardError 的子级,则不要从 StandardError 中拯救;否则你的手动“raise”将被救出。

【讨论】:

    猜你喜欢
    • 2016-07-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-12-25
    • 2011-12-20
    • 1970-01-01
    • 2016-02-02
    相关资源
    最近更新 更多