在 rails' 应用程序文件夹上命名空间 class

Namespaced class on rails' app folder

我有以下文件夹结构:

app
├── assets
├── controllers
├── helpers
├── mailers
├── market_adapters
│   └── german.rb
│...

而文件 market_adapters/german.rb 是:

module MarketAdapters #(I've also tried naming it singular)
   class German
   end
end

当 运行 测试时我得到错误:

/gems/activesupport-5.0.0/lib/active_support/dependencies.rb:512:in
`load_missing_constant': Unable to autoload constant German, 
expected .../app/market_adapters/german.rb to define it (LoadError)

添加market_adapters文件夹到autoload_paths好像没有效果config.autoload_paths << "#{Rails.root}/app/market_adapters"

如果我将 market_adapters 移动到 lib 文件夹,一切正常。但还是想把它放在 app 下,有什么想法吗?

顺便说一下,我正在使用 Rails 5.

app 中的所有子文件夹都会自动加载并添加到加载路径中。因此,将文件夹 market_adapters 添加到加载路径,名为 german.rb 的文件应定义 German class.

如果你真的想使用market_adapters作为命名空间并将文件保存在应用程序中,你需要将它存储在文件夹app/market_adapters/market_adapters/german.rb

然而,正确的位置是在库中。