我试图在rails中创建自定义异常,但我的设计解决方案存在问题.
这是我到目前为止所做的:
– 在app /文件夹中创建一个名为errors /的文件夹,其中包含exception.rb文件.
应用程序/错误/ exceptions.rb:
module Exceptions
class AppError < StandardError; end
end
>在我的一个控制器中,试图提高它:
引发例外:: AppError.new(“用户未经授权”)
但是当我调用控制器的动作时,这就是我得到的:
NameError (uninitialized constant Exceptions::AppError
Did you mean? TypeError
KeyError
IOError
EOFError
Did you mean? TypeError
KeyError
IOError
EOFError
):
我想我还没有完全理解如何创建新的目录和文件,并使用它们.
我已经读过在app dir中创建的所有东西都是急切的,所以我无法理解问题出在哪里.
最佳答案 简短版本:这是关于rails的自动代码加载 – 在这种情况下,文件包含异常并不重要(有关详细信息,请参阅主题上的
guide)
Rails会尝试从exception / app_error.rb中加载它在其自动加载路径上的任何文件中.因为您的文件命名与此不匹配,所以无法找到定义并且您获得了NameError.
如果您不关心代码重新加载(并且您可能不关心此类内容),那么您可以按原样保留文件,但需要在初始化程序中使用它们(确保应用程序/错误位于加载路径中):
require 'exceptions'
如果没有,那么你将不得不重新安排你的文件以匹配.如果您将应用程序/错误添加到rails的自动加载路径并保持文件不变,那么它应该可以正常工作.如果您不想更改自动加载路径,则必须将其模式化到自动加载路径中的某个位置,并确保模块的嵌套反映了磁盘上的组织.
就个人而言,我可能会将它们放在lib中,并要求它们使用初始化程序