我想延长使用简单的方法核心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
,如果试图在模型的方法来使用它。 当然,我重新启动后,更改代码的服务器。
一旦这样,你可以做到这一点是通过添加以下的文件中的一个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
文件。
明确require 'deefour/core_ext'
中lib/deefour.rb
有异曲同工之妙,因为它太不遵循标准的类名到目录映射的Ruby / Rails会期望。