2016-05-11 73 views
3

在我的Rails項目中,我想在app文件夾中添加services目錄幷包含一些服務對象。如何將服務目錄添加到Rails中的加載路徑?

所以我們可以說我想補充app/services/foo/test.rb它看起來像:

module Services 
    module Foo 
    class Test 

    end 
    end 
end 

在我config/application.rb我說:

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文件夾下的代碼將不加載任何配置。

我認爲問題是文件夾結構與您的類定義不匹配。

所以這個配置將工作:

應用程序/服務/富/ test.rb

module Foo 
    class Test 
    end 
end 

我的線索,例如我們有app/controllers/api/v1/users_controllers.rb和類常量將Api::V1::UsersController,不Controllers::Api::V1::UsersController

更新

按照慣例,我們通常使用FooServices,而不是Foo,更直觀,例如:

應用程序/服務/ foo_services/bar_parser.rb

module FooServices 
    class BarParser 
    # Do stuff 
    end 
end 

所以我們明白,foo_services文件夾中的每個類是與Foo

+0

這是一個好點,但是這不會解決我的問題。事情是,我想指定'Foo'與服務和* NOT *任何Foo有關。我們正在討論像'User'這樣的普通類,我想說我對'Service :: User'感興趣,但不是'User'模型。是否有這樣做? –

+0

請檢查我的更新部分 –

相關問題