[英]How can I add a services directory to the load path in Rails?
在我的 Rails 項目中,我想在app
文件夾中添加services
目錄並包含一些服務對象。
所以假設我想添加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
任何幫助我如何解決這個問題?
首先, 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
相關的服務
添加新目錄后,重新加載spring stop
我想我的問題是因為 Rails 命名約定。 我只是將類重命名為不使用module Services
並且它起作用了。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.