0

我尝试过config.autoload_paths += Dir["#{config.root}/lib/**/"]config.eager_load_paths += Dir["#{config.root}/lib/**/"]但不断收到uninitialized constant错误。

我认为这与dependency_loading被禁用有关,因为config.threadsafe!现在是 Rails 4 中的默认设置。

那么从 /lib 目录急切/自动加载内容的正确方法和线程安全方法是什么?

更新:/lib 结构

库/car.rb:

module Car
  CAR_TYPES = %w[volvo saab]
end

库/汽车/volvo.rb:

module Car
  class Volvo
  end
end

抛出的错误是NameError (uninitialized constant Car::CAR_TYPES)

更新2 rails c::

Car.class 
=> Module
Car::CAR_TYPES
=> NameError: uninitialized constant Car::CAR_TYPES

更新 3:有趣的是,Car::Volvo.new有效,但 Car::CAR_TYPES 无法引用。

4

1 回答 1

0

哎呀。我的应用程序实际上也被称为 Car 并且奇怪的是命名空间已经在使用中Car.constants => [:Application]。将其更改module Car为其他内容可以解决问题,并且我可以Cars::CAR_TYPES再次参考。

由于Car已经定义(在 中application.rb),自动加载甚至不会尝试加载lib/car.rb. 有关深入解释,请参阅https://stackoverflow.com/a/6797707/377920 。

于 2013-11-26T23:03:59.340 回答