2017-06-27 8 views
0

私のアプリケーション/ディレクトリには、サービスというフォルダがあります。サービスフォルダ内のファイルを自動読み込みするには、「config/spring.rb」に「app/services」を追加しました。RoRの自動ロードカスタム例外ファイル

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

これは問題ありません。しかし今、カスタム例外(app/services/errors /内)のサブディレクトリを作成したいと思います。私は私のspring.rbに新しい行を追加しようとすると、しかし:ここに私のカスタムエラーファイル(アプリ/サービス/エラー/ six_errorを

NameError: 
     uninitialized constant SixError 

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

それは働いていない、私はいくつかを持って.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 
+0

ファイルを順番に読み込む必要があると思いますが、SixErrorを含むファイルは最初に読み込まれ、次に残りのファイルが読み込まれます。したがって、次の%w(.ruby-version .rbenv-vars tmp/restart.txt tmp/caching-dev.txt app/services/services/errors/six_error.rb、app/services/errors)のロード順を変更してみてください。 ) – Ucpuzz

+0

このエラーをスローしているときにどの行のコードを指しているのですか? '初期化されていない定数SixError' – Ucpuzz

答えて

1

Railsは、dirnameに対応する名前空間を持つsubdirのクラスをロードしています。
あなたがこのような構造を持っている場合:
-app
--services
---エラー名前空間Errors時にクラスを宣言するためのファイルsix_errors.rbを期待
---- six_errors.rb

のRailsを。

あなたの場合、すべてのエラークラスをErrorsというモジュールに宣言する必要があります。

module Errors 
    class SixError < RuntimeError; end 
end 
関連する問題