2012-11-27 145 views
0

我想擴展核心Array類有簡單的方法:如何包含所有lib文件夾?

class Array 
    def to_hash 
    result = Hash.new 
    self.each { |a| result[a] = '' } 
    result 
    end 
end 

我把array.rb到LIB/core_ext並試圖通過

config.autoload_paths += %W(#{config.root}/lib) 
config.autoload_paths += Dir["#{config.root}/lib/**/"] 

,要求它在application.rb中但仍獲得undefined method 'to_hash' for ["var1", "var2", "var3"]:Array如果試圖在模型方法中使用它。代碼更改後,當然我重啓了服務器。

回答

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是,如果你有一些調用clas存在於該文件中的s Deefour::CoreExt。這就是爲什麼我的require 'deefour'行初始化程序知道自動加載lib/deefour.rb文件。

lib/deefour.rb中的明確require 'deefour/core_ext'用於相同的目的,因爲它也不遵循Ruby/Rails所期望的標準類名到目錄的映射。

+0

在初始值設定項中創建一個帶有require的特殊文件是否正確? – freemanoid

+0

是的,當你試圖從'lib /'中加載一個不符合典型的類名到目錄映射的文件時,這是正確的。Ruby/Rails將會預期 – deefour

+0

你可以根據標準類名顯示正確的變體目錄約定? – freemanoid

相關問題