在 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
。
然而,正确的位置是在库中。
我有以下文件夹结构:
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
。
然而,正确的位置是在库中。