LoadError无法自动加载常量

时间:2016-09-29 18:26:38

标签: ruby-on-rails autoload

似乎自动加载器正在加载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

1 个答案:

答案 0 :(得分:7)

根据我的经验,使用具有相同名称但具有不同命名空间的多个常量可能会很棘手。在您的情况下,您有两个Address常量,一个位于顶层,另一个位于Tools命名空间内。这可能会混淆Rails自动加载器。

一些可能的解决方案:

如果您想使用顶级Address(即您的模型),请使用::Address明确引用它。

如果这不起作用,您还可以使用require_dependency为自动装带器提供您想要的内容。在给你LoadError的文件的顶部,把这行:

require_dependency("address")

这是文档:

  

<强> require_dependency

     

使用机制解释文件并将其定义的常量标记为自动加载。 file_name可以是字符串,也可以响应to_path。

     

在代码中使用此方法,该代码绝对需要在该点定义某个常量。一个典型的用例是为不同名称空间中具有相同相对名称的常量确定常量名称解析,否则其评估将依赖于加载顺序。