ruby-on-rails - LoadError 无法自动加载常量

标签 ruby-on-rails autoload

似乎自动加载器正在加载 lib/tools/address 而不是我的模型

地址抛出以下错误

LoadError: Unable to autoload constant Address, expected /lib/tools/address.rb to define it

有人可以告诉我我做错了什么吗?我以为
地址将指向常量 models/address.rb

工具::lib/tools/address.rb 的地址

应用程序/模型/地址.rb

class Address
  blah
end

lib/tools/address.rb

module Tools
  class Address
    blah blah
  end
end

最佳答案

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

一些可能的解决方案:

当您想使用顶级Address(即您的模型)时,请使用::Address显式引用它。

如果这不起作用,您还可以使用 require_dependency 向自动加载器提示您想要什么。在出现 LoadError 的文件顶部,输入以下行:

require_dependency("address")

这是文档:

require_dependency

Interprets a file using mechanism and marks its defined constants as autoloaded. file_name can be either a string or respond to to_path.

Use this method in code that absolutely needs a certain constant to be defined at that point. A typical use case is to make constant name resolution deterministic for constants with the same relative name in different namespaces whose evaluation would depend on load order otherwise.

关于ruby-on-rails - LoadError 无法自动加载常量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39777480/

相关文章:

php - 是否可以根据 PHP 中的命名空间自动加载文件?

emacs - 如何使用自动加载正确加载自定义配置?

php - Composer psr-4 自动加载在部署后无法正常工作

mysql - ActiveRecord 缓存和 update_attributes

javascript - 使用 Rails 4 单击按钮时显示确认对话框?

php - 自定义 Composer 命名空间找不到类

ruby-on-rails - "Unable to autoload constant"Rails 5.2.0 中的错误

ruby-on-rails - CarrierWave:为多种类型的文件创建 1 个 uploader

ruby-on-rails - 如何使用 ruby​​ 获取 facebook 的 oauth 访问 token

ruby-on-rails - 如何设置 Sunspot 以搜索字符序列而不是单词?