rails'app文件夹上的命名空间类

时间:2016-07-03 09:01:12

标签: ruby-on-rails ruby rspec rspec-rails activesupport

我有以下文件夹结构:

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。

1 个答案:

答案 0 :(得分:5)

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

如果您确实希望将market_adapters用作命名空间并将文件保留在应用中,则需要将其存储在app/market_adapters/market_adapters/german.rb文件夹中。

然而,正确的地方是在lib。