如何包含所有lib文件夹?

我想用简单的方法扩展核心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获取undefined method 'to_hash' for ["var1", "var2", "var3"]:Array如果尝试在模型方法中使用它,则为undefined method 'to_hash' for ["var1", "var2", "var3"]:Array 。 当然,我在代码更改后重新启动了服务器。

一旦你可以这样做,就可以将以下内容添加到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' 

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

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