如果我自动加载模块,是否仍需要包含它

时间:2014-11-03 12:09:23

标签: ruby-on-rails ruby-on-rails-4

我有一个名为KeyValidations的模块,它依赖于另一个名为Crypt的模块。这是目录结构:

.
├── lib
|   └── my_modules
|      ├── crypt.rb
|      └── key_validations.rb

我已将以下行添加到application.rb,因此应自动加载lib/中的所有内容:

config.autoload_paths += Dir["#{config.root}/lib/**/"]

问题

由于我自动加载lib中的所有内容,在使用之前是否仍需要添加include MyModules::Crypt?我已尝试直接在Crypt访问rails console,但失败了,并显示以下消息:

  

LoadError:无法自动加载常量Crypt,预期/var/www/dev/whitepayments.com/White/lib/my_modules/crypt.rb来定义它

当我在它之前运行include MyModules::Crypt时,它运行正常。

1 个答案:

答案 0 :(得分:1)

config.autoload_paths += Dir["#{config.root}/lib/**/"]表示require my_modules/crypt.rb不需要进入您的环境。但是include MyModules::Crypt意味着在给定的上下文(例如类或模块)中将包含模块方法。如果在环境中需要模块,则不等于其方法也被加载。这就是为什么include(或extend,取决于范围)是必要的。