如何包含所有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期望的标准类名到目录映射。