在我的Rails项目中,我想在services
文件夹中添加app
目录并包含一些服务对象。
所以,让我们说要添加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
任何帮助我该如何解决这个问题?
答案 0 :(得分:7)
首先,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
答案 1 :(得分:1)
添加新目录后,重新加载弹簧
spring stop
答案 2 :(得分:0)
我想我的问题是因为 Rails 命名约定。我只是将类重命名为不使用 module Services
并且它起作用了。