简而言之,在继承类时,请使用显式的模块命名空间,或尽可能避免使用复杂的命名空间。
类和模块常量取决于自动加载路径查找的顺序(Ruby on Rails功能),更多内容请参见下文。 因此,类的可发现性可能会根据继承类的名称和位置而有所不同。 当多个类共享相同的名称时(例如在我们的Rails应用程序中),这种细微差别会影响隐式类的继承。
Ruby on Rails在其autoload_paths
(默认情况下, app
中的所有app
子目录和启动时出现的引擎,以及app/*/concern
)中有两种主要算法可用于不断查找。
可以使用以下命令检查autoload_paths
的值:
- SurveyMonkey违抗硅谷劳工等级制度,为合同工提供全部收益
- 不要为自己不突出而在工作中表现出特殊而感到沮丧
- 2017年圣诞礼物指南:现代人!
- 阅读,看见,打开–现代即时消息中阅读回执的生命的后果–
- 尼日利亚健康观察将健康与科技融合在一起
$ bin / rails r'放入ActiveSupport :: Dependencies.autoload_paths'
.../app/assets
.../app/controllers
.../app/helpers
.../app/mailers
.../app/models
.../app/resources # This is loaded before models/
.../app/controllers/concerns
.../app/models/concerns
.../test/mailers/previews
在尝试清理一些代码时,我无意间创建了一个难以发现的错误。 以下是一些示例代码,可以查看实际存在的问题:
希望Ruby on Rails自动加载现在更加清晰。 您可以随时在此处阅读更多信息并改进Ruby on Rails文档。 如果您有任何疑问或发现错误,请在此处发表评论或通过Twitter与我联系!
在Rails 5中,默认情况下禁用自动加载。