Rails没有在模块中找到类

时间:2015-06-01 21:13:10

标签: ruby-on-rails ruby

我知道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/**/"]

问题是当我使用常量方法时,它会给出一个空数组。

1 个答案:

答案 0 :(得分:0)

问题是延迟加载。在生产模式下,Rails通常设置为进行延迟加载。这意味着在引用它们之前不会实际定义常量:此时它会注意到您引用了一个未定义的常量,找到该文件并加载它。

如果您关闭延迟加载,那么您可以依赖.constants来告诉您可用的内容。但表现会受到影响。

另一种解决方法是显式加载所需的文件。