2016-05-11 2 views
3

私のRailsプロジェクトでは、servicesディレクトリをappフォルダに追加し、いくつかのサービスオブジェクトを含める必要があります。サービスディレクトリをRailsのロードパスに追加するにはどうすればよいですか?

それでは、私がどのように見えるどのapp/services/foo/test.rbを追加したいとしましょう:私のconfig/application.rb

module Services 
    module Foo 
    class Test 

    end 
    end 
end 

私がコメントを追加しました:私はコンソールでファイルをロードしようとすると、

config.paths.add File.join('app', 'services'), glob: File.join('**', '*.rb') 
config.autoload_paths += Dir[Rails.root.join('app', 'services', '*')] 

は、しかし、それはありません仕事:

⇒ rails c 
Loading development environment (Rails 4.1.4) 
[1] pry(main)> Services::Foo::Test 
NameError: uninitialized constant Services 

どうすればこの問題を解決できますか?

+1

あなたのレールコンソールをリロードしようとしましたか? – Kumar

+0

@KumarAbinashはい私はまだ働いていませんでした:( –

答えて

5

まず、appフォルダの下のコードは、設定なしでロードされます。

私は問題がフォルダ構造があなたのクラス定義と一致しなかったと思います。

ので、この設定は動作します:

アプリ/サービス/ fooの/ test.rb

module Foo 
    class Test 
    end 
end 

私の手掛かりは、例えば、我々はapp/controllers/api/v1/users_controllers.rbを持っている、あるクラスの定数はApi::V1::UsersController、ではないだろうControllers::Api::V1::UsersController

更新

従来、我々は通常、代わりにFooFooServicesを使用し、それは例えば、明確である:

アプリ/サービス/ foo_services/

module FooServices 
    class BarParser 
    # Do stuff 
    end 
end 

は、だから我々は理解しbar_parser.rbそのfoo_servicesフォルダ内のすべてのクラスFoo

+0

これは良い点ですが、これは私の問題を解決するものではありませんが、私は 'Foo'がServicesと関連していることを指定したいと思います。私たちは 'User'のような共通クラスについて話していますが、私は' Service :: User'に興味がありますが、 'User'モデルには興味がないと言いたいのですが、どうしてですか? –

+0

私の更新部分をチェックしてください –

関連する問題