2017-05-04 52 views
3

我有一個Rails應用程序,我需要延長Hash模塊來添加一個方法 -擴展哈希類的Rails應用程序

class Hash 
    def delete_blank 
    delete_if{|k, v| v.nil? or (v.instance_of?(Hash) and v.delete_blank.empty?)} 
    end 
end 

我已經創建了一個名爲申請,hash_extensions.rb並放在這在我的lib文件夾,並與下面的行場配置的自動加載路徑在config/application.rb

config.autoload_paths += %W(#{config.root}/lib) 

當我請一個哈希刪除空白法不過,我得到下面的錯誤 -

undefined method `delete_blank' for #<Hash:0x000000081ceed8>\nDid you mean? delete_if 

除此之外,我還嘗試將require "hash_extensions"放在我稱之爲delete_blank方法的文件的頂部。

我在這裏做錯了什麼,或者我可以避免擴展哈希具有相同的功能?

+0

是不是'自我'造成的問題? – Iceman

+0

對不起,我只是在那裏試驗,改了它 –

+1

可能重複[在Ruby on Rails中,擴展String類,應該在哪裏放置代碼?](http://stackoverflow.com/questions/5654517/in- ruby-on-rails-to-extend-the-string-class-where-code-put-in) – Gerry

回答

2

你可以在幾個不同的方式解決此問題:

  1. 假設hash_extensions.rb駐留your_app/lib/extensions下。 (這是存儲在一個單獨的文件夾的所有擴展是一個好主意),要求在config/application.rb如下所有擴展:

    Dir[File.join(Rails.root, "lib", "extensions", "*.rb")].each {|l| require l } 
    
  2. 移動hash_extensions.rbconfig/initializers下,它應該automoagically加載。

  3. 創建一個文件夾說libextensions根據your_app/apphash_extensions.rb移動到它和Rails會照顧加載它。