我的应用程序有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``
我做错了什么?
答案 0 :(得分:1)
关于常量查找。
ServiceException
在Project::Errors
的范围内定义。当您引用ServiceException
而没有前缀Project::Errors
时,它会查找外部作用域中定义的类,并且失败,因为没有。
您应该使用完整路径。
答案 1 :(得分:0)
include Project::Errors
将上一行替换为以下行 包括Project :: Errors :: ServiceException