2016-05-12 72 views
1

我想擴展Ruby類,例如,不能覆蓋Rails的核心Ruby類2.3.4

# lib/core_ext/hash.rb 

class Hash 
    def gop_compact 
    delete_if{|k, v| (k.blank? || v.blank?)} 
    end 
end 

我在/ lib目錄下創建一個單獨的文件夾,如下所示,

lib/core_ext/hash.rb

我試着按以下步驟包括在load_paths這條道路,

# config/environment.rb 
config.load_paths += %W(#{RAILS_ROOT}/lib/core_ext) 

完成所有這些設置後,重新啓動服務器並嘗試調用Hash對象的方法,但它會引發未定義的方法異常。

注: - Rails的版本是2.3.4

我花了很多時間在這一點,但沒有運氣呢。任何幫助表示讚賞。

在此先感謝!

回答

2

即使您已將core_ext文件夾添加到加載路徑中,仍需要使用require 'hash'。爲了最大限度地減少內存使用量,Rails實際上並不需要ruby文件,只是因爲它將它們添加到您的load_path

>> Hash.instance_methods.grep(/gop/) 
=> [] 
>> require "hash" 
=> true 
>> Hash.instance_methods.grep(/gop/) 
=> [:gop_compact] 
+0

是的,它確實有效。但是,我如何通過應用程序使這種方法可用? –

+0

在將它添加到加載路徑後立即在您的'environment.rb'中需要。 –

+0

在'environment.rb'文件中,我在'config.load_paths + =%W(#{RAILS_ROOT}/lib/core_ext)'這行之後嘗試過'require'hash''。它拋出異常。我誤解了嗎? –