2012-11-02 41 views
2

我在lib文件夾中的Rails 3.2應用程序中有一堆自定義類:即擴展ActiveRecord等。它一切正常。Rails不會從lib中加載我的模塊

不過我想添加一些自定義的方法來文件實用程序,即

module FileUtils 
    def last_modified_file(path='.') 
    # blah ...  
    end 
end 

我把它放在LIB/file_utils.rb 在我的application.rb中我有

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

我的其他自定義分類被加載,但不是模塊。

我讀了(Best way to load module/class from lib folder in Rails 3?),我應該在模塊中定義一個類,以便Rails根據FileUtils.class來拾取它 - 它應該是Object < BasicObject。

所以,我想

module FileUtils 
    class Object 
    def last_modified_file(path='.') 
     # blah ...  
    end 
    end 
end 

但是,這並不工作。

但是,當我啓動irb,只是粘貼我的代碼,有效地將我的新代碼放入對象並重新包括我的模塊 - 它工作正常。

Whaat amd我在這裏找不到?

回答

11

你的補丁永遠不會被加載,因爲只有當Rails找不到常量時纔會調用autoload。由於FileUtils常量已經存在,自動加載器永遠不會被調用,並且您的文件永遠不會被加載。

只需從初始化程序中獲取它。

require File.join(Rails.root, "lib/file_utils.rb") 
+0

這就是我現在正在做的。我有一個初始化程序'require_libs.rb',用於需要明確需要的一些寶石。 'require「#{Rails.root} /lib/file_utils.rb」;包括FileUtils'。那麼你是說沒有另一種Rails「automagic」的方式呢? – konung

+4

正確。自動加載僅適用於尚未出現的常量。遇到缺少的常量時,Rails會在自動加載路徑中搜索與常量名稱的snake_cased版本匹配的文件並加載它。 –