似乎自动加载器正在加载lib / tools / address而不是我的模型
地址抛出以下错误
LoadError:无法自动加载常量地址,预期 /lib/tools/address.rb来定义它
有人可以告诉我我做错了什么。我以为是
地址将指向常量模型/ address.rb
和
Tools :: lib / tools / address.rb的地址
应用程序/模型/ address.rb
class Address
blah
end
LIB /工具/ address.rb
module Tools
class Address
blah blah
end
end
答案 0 :(得分:7)
根据我的经验,使用具有相同名称但具有不同命名空间的多个常量可能会很棘手。在您的情况下,您有两个Address
常量,一个位于顶层,另一个位于Tools
命名空间内。这可能会混淆Rails自动加载器。
一些可能的解决方案:
如果您想使用顶级Address
(即您的模型),请使用::Address
明确引用它。
如果这不起作用,您还可以使用require_dependency
为自动装带器提供您想要的内容。在给你LoadError的文件的顶部,把这行:
require_dependency("address")
这是文档:
<强> require_dependency 强>
使用机制解释文件并将其定义的常量标记为自动加载。 file_name可以是字符串,也可以响应to_path。
在代码中使用此方法,该代码绝对需要在该点定义某个常量。一个典型的用例是为不同名称空间中具有相同相对名称的常量确定常量名称解析,否则其评估将依赖于加载顺序。