2017-02-23 5 views
0

にモジュールを拡張:ルビーオンレール - 次のように私はlibフォルダにモジュールlog_exceptionを持つコントローラ

/lib/log_exception.rb

module LogException 
    def Log(e, message="") 
    Rails.logger.error "#{message}: #{e.message}" 
    e.backtrace[0..13].each {|line| Rails.logger.error line} 
    end 
end 

extend LogException 

そして今、私はLogメソッドを使用しようとしていますが(これは

Log(e, "Error in home action of DashboardController") 

しかし、それは私に次のエラー与えている:

のモジュールが拡張されると、このコントローラに直接)クラスメソッドとなります私も、私はモデル(ユーザー)のいずれかで同じモジュールを拡張し、

User.Log(e, "Error in home action of DashboardController") 

と同じメソッドを呼び出した場合、それは私のapplication.rbに

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

を次のように設定している

undefined method `Log' for #<DashboardController 

正常に動作しますが、コントローラの場合は動作しません。

私は様々なオプションを試しましたが運はありません。

誰でも私が間違っていることを説明できますか?またはどのようにモジュールをコントローラで拡張できますか?

答えて

2

includeではなく、extendです。あなたが与えるものextend

ControllerName.Log(...) 

しかし、あなたが本当にしたいを行う可能性があるhomeアクションでありながら、あなたが実際に動作していることから、(コントローラのインスタンスでメソッドを使用できるようにすることですコントローラインスタンス)であり、コントローラ自体ではありません。

編集:物事をクリアするための

One more thing Can I access same method directly without doing include or extend on module? if yes can you please share?

module LogException 
    def Log(e, message="") 
    Rails.logger.error "#{message}: #{e.message}" 
    e.backtrace[0..13].each {|line| Rails.logger.error line} 
    end 
    extend self 
end 

LogException.Log(your_error, your_message) 
+0

おかげで、それは働きました。 – Tushar

+0

@Tushar no probs、それは問題を解決したので、答えを受け入れることを確認してください。 –

+0

あなたは答えました。もう1つモジュールにインクルードまたは拡張を行わずに同じメソッドに直接アクセスできますか?はいの場合は共有していただけますか? – Tushar

関連する問題