2013-08-23 68 views
7

我想要創建一個通用的字符串操作類,可以在我的Rails應用程序中跨模型,視圖和控制器使用。Rails:無法訪問我的lib目錄中的模塊

現在,我試圖把一個模塊放在我的lib目錄中,我只是試圖訪問rails控制檯中的函數來測試它。我已經嘗試了很多來自類似問題的技術,但是我無法使其工作。

在我的lib/filenames.rb文件:

module Filenames 

    def sanitize_filename(filename) 
    # Replace any non-letter or non-number character with a space 
    filename.gsub!(/[^A-Za-z0-9]+/, ' ') 

    #remove spaces from beginning and end 
    filename.strip! 

    #replaces spaces with hyphens 
    filename.gsub!(/\ +/, '-') 
    end 

    module_function :sanitize_filename 

end 

當我嘗試調用sanitize_filename( 「一些字符串」),我得到一個無方法錯誤。當我嘗試調用Filenames.sanitize_filename(「some string」)時,我得到一個未初始化的常量錯誤。當我嘗試包含'/ lib /文件名'時,我得到一個加載錯誤。

  1. 這是創建一種我可以在任何地方訪問的最常規方法嗎?我應該創建一個類嗎?

  2. 我該如何得到它的工作? :)

謝謝!

+2

可能的重複[OO設計在Rails:放東西](http://stackoverflow.com/questions/1068558/oo-design-in-rails-where-to-put-stuff) – 2013-08-23 00:13:28

+3

或可能重複[在Rails 3中從lib文件夾加載模塊類的最佳方式](http://stackoverflow.com/questions/3356742/best-way-to-load-module-class-from-lib-folder-in-rails- 3) – RyanWilcox

回答

10

對於一個非常好的答案,看看你的問題的評論中引用耶胡達卡茨的答案(真的,看看那個)。

在這種情況下的簡短答案是,您可能沒有加載您的文件。查看RyanWilcox給你的鏈接。你可以通過在你的文件中加入一個語法錯誤來檢查 - 如果在啓動你的應用程序(服務器或控制檯)時沒有引發語法錯誤,你就知道這個文件沒有被加載。

如果你認爲你正在加載它,請發佈你正在使用的代碼來加載它。再次請參閱RyanWilcox爲您提供的詳細信息。它包括這樣的代碼,它進入您的環境配置文件中的一個:

# Autoload lib/ folder including all subdirectories 
config.autoload_paths += Dir["#{config.root}/lib/**/"] 

不過說真的,看耶胡達的回答。