如何在Rails应用程序中创建自定义异常?

时间:2015-05-15 10:01:55

标签: ruby-on-rails ruby exception ruby-on-rails-4

我正在尝试在rails中创建自定义异常,但我的设计解决方案存在问题。

这是我到目前为止所做的:

app/文件夹中创建一个名为errors/的文件夹,其中包含文件exceptions.rb

app/errors/exceptions.rb

module Exceptions
    class AppError < StandardError; end
end
  • 在我的一个控制器中,尝试提高它:

引发异常:: AppError.new(&#34;用户未获得授权&#34;)

但是当我打电话给控制器的动作时,我得到的是:

NameError (uninitialized constant Exceptions::AppError

Did you mean? TypeError
              KeyError
              IOError
              EOFError


Did you mean? TypeError
              KeyError
              IOError
              EOFError
):

我想我还没有完全理解如何创建新目录和文件,并使用它们。

我已经读过在app目录中创建的所有内容都是急切加载的,所以我无法理解问题出在哪里。

1 个答案:

答案 0 :(得分:2)

简短版本:这是关于rails的自动代码加载 - 在这种情况下,文件包含异常并不重要(有关详细信息,请参阅主题guide

Rails会尝试从exceptions/app_error.rb加载到自动加载路径中的任何文件中。因为您的文件命名与此不匹配,所以无法找到定义并且您获得了NameError。

如果您不关心代码重新加载(并且您可能不关心此类内容),那么您可以按原样保留文件,但需要在初始化程序中使用它们(确保应用程序/错误位于加载路径中) :

require 'exceptions'

如果没有,则您必须重新排列文件以匹配。如果您将应用程序/错误添加到rails的自动加载路径并保持文件不变,那么它应该可以正常工作。如果您不想更改自动加载路径,则必须将其模式化到自动加载路径中的某个位置,并确保模块的嵌套反映了磁盘上的组织。

就我个人而言,我可能会将它们粘贴在lib中并使用初始化程序