如何包含所有lib文件夹?

时间:2012-11-27 21:44:32

标签: ruby-on-rails ruby require environment class-extensions

我想用简单的方法扩展核心Array类:

class Array
  def to_hash
    result = Hash.new
    self.each { |a| result[a] = '' }
    result
  end
end

我将array.rb放入lib / core_ext并试图在application.rb中要求它

config.autoload_paths += %W(#{config.root}/lib)
config.autoload_paths += Dir["#{config.root}/lib/**/"]

但是如果尝试在模型方法中使用它,仍然会得到undefined method 'to_hash' for ["var1", "var2", "var3"]:Array。当然,我在代码更改后重新启动了服务器。

1 个答案:

答案 0 :(得分:2)

一旦您可以执行此操作,请将以下内容添加到config/initializers

中的一个文件中
require 'core_ext/array`

您的所有autoload_paths配置值都会使请求类/文件的路径可用。在我的应用程序中,我可能有一些文件结构如下

- lib/
  |
  |- deefour.rb
  |- deefour/
     |
     |- core_ext.rb

deefour.rb我有

require 'deefour/core_ext'

config/initializers内部我有一个deefour.rb文件只包含

require 'deefour'

如果您对该文件中存在的类lib/deefour/core_ext.rb进行了一些调用,那么您设置的自动加载配置值的唯一方法将导致Rails看起来自动加载Deefour::CoreExt。这就是初始化程序中的require 'deefour'行知道自动加载lib/deefour.rb文件的原因。

require 'deefour/core_ext'中的显式lib/deefour.rb用于同一目的,因为它也不遵循Ruby / Rails期望的标准类名到目录映射。