0

我想用简单的方法扩展核心 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如果尝试在模型方法中使用它仍然会得到。当然,我在代码更改后重新启动了服务器。

4

1 回答 1

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'

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

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

于 2012-11-27T21:49:56.033 回答