我想用简单的方法扩展核心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
。当然,我在代码更改后重新启动了服务器。
答案 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期望的标准类名到目录映射。