轨道 - 包括包含类的模块给出未初始化常量错误



我的应用程序有lib/project/errors,其中包含一堆异常类,其中一个是ServiceException。

module Project
  module Errors
    class ServiceException < Exception
      def initialize(message = nil)
        super message
      end
    end
  end
end

我正在尝试在我的游戏服务中使用它:

module GameMan

  class GameService
     Blah blah
     def validate(score)
       raise Project::Errors::ServiceException.new('blah')
     end
  end
end

这行得通,但是我讨厌到处写完整的模块路径。有没有办法避免这种情况?

我试过了

module GameMan
   class GameService
      include Project::Errors
      Blah blah
      def validate(score)
       raise ServiceException.new('blah')
      end
    end
end

这给了 uninitialized constant ServiceException错误。

我有 config.autoload_paths += %W(#{config.root}/lib #{config.root}/app/services) already set in应用程序.rb''

我做错了什么?

这都是关于常量查找的。

ServiceExceptionProject::Errors 的范围内定义。当您引用不带前缀ServiceExceptionProject::Errors它会查找在外部作用域中定义的类,但由于没有前缀,因此失败。

您应该使用完整路径。

include Project::Errors

将上面行替换为以下行 包括项目::错误::服务异常

最新更新