使用RoR自动加载自定义例外文件

时间:2017-06-27 13:44:54

标签: ruby-on-rails ruby

在我的app /目录中,我有一个文件夹 services 。要在服务文件夹中自动加载我的文件,我添加了“app / services'在我的" config / spring.rb'

%w(
  .ruby-version
  .rbenv-vars
  tmp/restart.txt
  tmp/caching-dev.txt
  app/services
).each { |path| Spring.watch(path) }

它的工作正常。但现在,我想为我的自定义异常(在app / services / errors /中)创建一个子目录。但是当我尝试在spring.rb中添加一个新行时:

%w(
      .ruby-version
      .rbenv-vars
      tmp/restart.txt
      tmp/caching-dev.txt
      app/services
      app/services/errors
    ).each { |path| Spring.watch(path) }

它没有用,我得到了一些:

NameError:
       uninitialized constant SixError

这是我的自定义错误文件(app / services / errors / six_error.rb):

class SixError < RuntimeError
end

class NilTokenError < SixError
end

class SixRequestFailed < SixError
end

class NoAliasRequestPendingError < SixError
end

class AmountLessThanZeroError < SixError
end

class NilAliasError < SixError
end

这就是我所说的:

SixError::SixRequestFailed

1 个答案:

答案 0 :(得分:1)

Rails在subdir中加载类,其名称空间对应于dirname 如果你有这种结构:
-app
--services
---错误
---- six_errors.rb

Rails期望文件six_errors.rb在命名空间Errors上声明类。

在您的情况下,您应该在名为Errors的模块中声明所有错误类。

module Errors
  class SixError < RuntimeError; end
end