- 无法在 Rails 应用程序的类中包含模块

  显示原文与译文双语对照的内容
137 3

我有一个包含模块( ServerConstants )的class(Server)

class Server
 include ServerConstants

两个文件都位于 lib/server文件夹内

出现错误:无法自动加载常量 Server::ServerConstants

  • 当我使用时需要明确的效果。

我阅读了 Rails 自动加载功能,并想知道为什么它不能 picking 。我的application.rb 文件似乎包括自动加载路径。

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

我丢失了什么我们正在使用 Rails 4.2.8?

时间:原作者:0个回答

80 1

最后我发现了一个答案,即使我不确定它为什么工作。

而不是定义模块

module ServerConstants

我使用

module Server::ServerConstants

它工作起来 !

另一个发现:

只有当你的文件夹和类名相同时才出现这里问题。in服务器文件夹包含服务器类和ServerConstants模块。当我把服务器名重构为Server_X时,问题就消失了。

原作者:
90 0

Include语句直接查找没有作用域或者与名称冲突的模块。但是当你将它放在 lib/server/目录中时,它可以以通过告诉 include 语句查找 ServerConstants 模块。这就是为什么如果你使用 include Server::ServerConstants,现在你已经经提到了要查看的文件夹和现在的范围。

原作者:
...