我知道Rails对我的类和模块的名称应该是什么意见。因此,我试图与之保持一致 在Rails.root / lib / query_finder目录中,我有以下结构:
[AllowAnonymous]
在base.rb中,我将我的类命名为:
/lib
/query_finder
/adapters
active_record.rb
mongoid.rb
base.rb
/strategies
base.rb
在adapters / base.rb中,我将我的类命名为:
module QueryFinder
class Base
end
end
在adapters / mongoid.rb中,我将我的类命名为:
module QueryFinder
module Adapters
class Base
end
end
end
在adapters / active_record.rb中,我将我的类命名为:
module QueryFinder
module Adapters
class Mongoid
end
end
end
但是Rails无法找到适配器。我试图抓住所有常数:
module QueryFinder
module Adapters
class ActiveRecord
end
end
end
它给了我一个空数组。我还在自动加载路径中添加了以下内容:
> QueryFinder::Adapters.constants
=> []
我可能做错了什么?
我只是想说明我能够像这样引用常量和类:
config.autoload_paths += Dir["#{config.root}/lib/**/"]
问题是当我使用常量方法时,它会给出一个空数组。
答案 0 :(得分:0)
问题是延迟加载。在生产模式下,Rails通常设置为进行延迟加载。这意味着在引用它们之前不会实际定义常量:此时它会注意到您引用了一个未定义的常量,找到该文件并加载它。
如果您关闭延迟加载,那么您可以依赖.constants来告诉您可用的内容。但表现会受到影响。
另一种解决方法是显式加载所需的文件。