我正在尝试在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
目录中创建的所有内容都是急切加载的,所以我无法理解问题出在哪里。
答案 0 :(得分:2)
简短版本:这是关于rails的自动代码加载 - 在这种情况下,文件包含异常并不重要(有关详细信息,请参阅主题guide)
Rails会尝试从exceptions/app_error.rb
加载到自动加载路径中的任何文件中。因为您的文件命名与此不匹配,所以无法找到定义并且您获得了NameError。
如果您不关心代码重新加载(并且您可能不关心此类内容),那么您可以按原样保留文件,但需要在初始化程序中使用它们(确保应用程序/错误位于加载路径中) :
require 'exceptions'
如果没有,则您必须重新排列文件以匹配。如果您将应用程序/错误添加到rails的自动加载路径并保持文件不变,那么它应该可以正常工作。如果您不想更改自动加载路径,则必须将其模式化到自动加载路径中的某个位置,并确保模块的嵌套反映了磁盘上的组织。
就我个人而言,我可能会将它们粘贴在lib中并使用初始化程序