【发布时间】:2020-01-19 02:03:42
【问题描述】:
在引用 ActiveRecord 模型的迁移中遇到 NameError Exception: uninitialized constant 错误问题。控制台中不存在这些相同的问题,因此我对迁移中发生的与 Rails 控制台不同的情况感到有些困惑。
基本上,我的 ActiveRecord 模型似乎无法正确自动加载所有内容。
这是一个在控制台中运行但在迁移中引发错误的简单调用示例:
migration(byebug)> Customer.all
*** NameError Exception: uninitialized constant Customer (call 'Customer.connection' to establish a connection)::Querier
Did you mean? Numerizer
nil
同样的调用,在控制台中,有效。
有趣的是,如果我第一次调用 确实 正确加载的另一个模型(例如,MyOtherThing.all),那么如果我下次尝试调用Customer.all 将不再引发错误。
只是有点不知道从哪里开始寻找导致这种情况的原因。谢谢!
【问题讨论】:
-
FWIW,一旦您在任何模型上调用 Model.connection,该数据库中的所有模型都将被连接。不回答您的问题,但应该解释您提出的一个问题。
-
啊,有趣。如果我连续两次使用相同的
Customer.connection('select * from customers'),则第一次在下一次工作时会引发错误。不知道那告诉我什么... -
不确定这是否有帮助。自从升级到 rails 6 后,我遇到了自动加载问题。有时切换到
config.autoloader = :classic会有所帮助。切换回来不会带来问题(无论如何它会在一段时间后回来)。我们正在使用 bootsnap,我使用DISABLE_BOOTSNAP=1运行每个命令,这给了我更大的成功率。我没有任何解决方法,也没有更好的解决方法。
标签: ruby-on-rails ruby ruby-on-rails-6