Rails NameError:初始加载时未初始化的常量

时间:2014-09-16 13:53:19

标签: ruby-on-rails nameerror

我有一个奇怪的重复错误:每次启动一个worker时,它在第一次尝试时失败,然后从那里开始工作。每次我都得到同样的错误。

NameError: uninitialized constant Models::ScorecardVirtualAttributes::LevelCalculator

所以我经常检查:首先我查看它是否拼写正确。然后我检查了它是否依赖于某种未包含的宝石,但事实并非如此。

我想我已经在控制台中复制了失败。在控制台的初始启动时,我运行:

[1] toolkit »  defined? Models::ScorecardVirtualAttributes::LevelCalculator
  => nil
[2] toolkit »  defined? ::Models::ScorecardVirtualAttributes::LevelCalculator
  => nil
[3] toolkit »  Models::ScorecardVirtualAttributes::LevelCalculator
  => Models::ScorecardVirtualAttributes::LevelCalculator < Object
[4] toolkit »  defined? ::Models::ScorecardVirtualAttributes::LevelCalculator
  => "constant"

正如您所看到的,当我检查它是否已定义时,它最初会失败。但是在我直接调用它之后,当我检查它是否被定义时,它返回预期的“常量”。

然后我想也许它没有被正确加载。这是我在config/application.rb中的内容:

# Within config/application.rb
...
config.autoload_paths += %W( #{Rails.root}/lib) #/models

我已将lib/models目录添加到autoload_paths,而最初似乎未加载的模型位于lib/models/scorecards_virtual_attributes/level_calculator.rb

是否还有其他可能导致此问题的原因?或者我在做什么有问题?

1 个答案:

答案 0 :(得分:0)

Rails 3不会在lib目录下自动加载文件。如果您使用的是Rails 3或更高版本,则必须在config / application.rb中加载它。