如何包括所有lib文件夹?(How to include all lib folder?)

2019-11-01 06:00发布

我想延长使用简单的方法核心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 ,如果试图在模型的方法来使用它。 当然,我重新启动后,更改代码的服务器。

Answer 1:

一旦这样,你可以做到这一点是通过添加以下的文件中的一个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会期望。



文章来源: How to include all lib folder?