我有一个名为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
时,它运行正常。
答案 0 :(得分:1)
config.autoload_paths += Dir["#{config.root}/lib/**/"]
表示require my_modules/crypt.rb
不需要进入您的环境。但是include MyModules::Crypt
意味着在给定的上下文(例如类或模块)中将包含模块方法。如果在环境中需要模块,则不等于其方法也被加载。这就是为什么include
(或extend
,取决于范围)是必要的。