2011-03-03 63 views
0

在/ lib中我有一個test_module.rb文件有:/lib文件夾中有一個模塊test_module.rb,如何從我的User.rb模型中引用?

require 'digest' 
module TestModule 

    def encrypt(string) 
     Digest::SHA2.hexdigest(string) 
    end 

end 

現在在我的User.rb我:

class user < ActiveRecord:Base 

    before_save :set_password 


    private 

    def set_password 
     self.encrypted_password = TestModule::encrypt(password) 
    end 


end 

我如何才能訪問這個方法,現在我m得到一個錯誤,說加密不是一個方法(未定義)。

我是否需要或包含此模塊?

我只是想調用方法ecrypt就像它的靜態方法真的,建議?

回答

1

而不是def encrypt在你的模塊中,做def self.encrypt。用簡單的方法解釋這一點,用自身前綴名稱將使其成爲靜態函數。它實際上更復雜一點,那就是,你正在定義對存儲在常量TestModule中的Module實例的單例類進行加密,但是這類事情正好處於高級ruby領域。你可以把自我方法想象成靜態的,而不是真的陷入任何麻煩。

+0

那麼我只需使用require'testmodule'或test_module或? – Blankman 2011-03-03 04:27:55

+0

如果您使用的是導軌2,它應該可以正常工作。 rails 3他們從自動載入路徑下載lib,所以你需要做一些類似require「#{Rails.root}/lib/test_module」的事情。或者將lib添加回自動加載路徑http://hemju.com/2010/09/22/rails-3-quicktip-autoload-lib-directory-including-all-subdirectories/ – 2011-03-03 04:47:24

+0

@ matt ..他們爲什麼放棄/ lib從自動加載路徑?..這是一個很好的默認設置.. – rubyprince 2011-03-03 05:10:59

相關問題