Rails - 包含类的模块给出了Uninitialized Constant错误

时间:2016-07-15 04:11:01

标签: ruby-on-rails ruby module mixins

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

module Project
  module Errors
    class ServiceException < Exception

      def initialize(message = nil)
        super message
      end
    end
  end
end

我想在我的GameService中使用它:

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 application.rb``

我做错了什么?

2 个答案:

答案 0 :(得分:1)

关于常量查找。

ServiceExceptionProject::Errors的范围内定义。当您引用ServiceException而没有前缀Project::Errors时,它会查找外部作用域中定义的类,并且失败,因为没有。

您应该使用完整路径。

答案 1 :(得分:0)

include Project::Errors

将上一行替换为以下行     包括Project :: Errors :: ServiceException

相关问题