2016-08-12 10 views
0

私のクエリでは、私のFileDataReadモジュールを読んで、接続を解除するためのparamを取得しようとしています。別のファイルからメソッドを取得する方法未定義のメソッド

私が見逃しているものを見ていない:(

エラー:

logger': undefined method `read_config_file' for Logging:Module (NoMethodError)

マイlogingモジュールファイル:

module Logging 
    include FileDataRead 

    def logger 
    Logging.logger 
    end 

    def self.logger 
    @conf = read_config_file('logging') 
    @logger ||= Logger.new(@conf['name']) 
    @logger.formatter = proc { |severity, datetime, progname, msg| 
           "[#{datetime.strftime('%F %T')}] #{msg}\n" 
          } 
    @logger 
    end 
end 

読み取りファイル:

require 'yaml' 

module FileDataRead 
    #include logger 

    def read_config_file(var) 
    config = YAML::load_file(File.join('config.yml')) 
    if var == 'database' 
    # logger.info("database".colorize("cyan", :style =>"strikethrough")) 
     puts "database" 
     @conf = config['database'] 
    elsif var == 'logging' 
     puts "logging" 
     @conf = config['logging'] 
    elsif var == "mail" 
     @conf = config['mail'] 
    end 
    end 
end 

答えて

1

モジュールを組み込むと、rubyはmodulesメソッドをインスタンスメソッドとして追加します。あなたがしたいことは、クラスメソッドとしてLoggerモジュールにFileDataReadのメソッドを追加することだと思います。 Rubyではキーワードextendを使用してこれを行うことができます。これを行う

module Logger 
    extend FileDataReader 

    # rest of the code stays the same 

end 

、それは別のクラスメソッド内から呼び出すことができることを意味し、ロガーにread_config_fileクラスメソッドを作成します。これに関するもっと多くの情報はhereで見つけることができます。

+0

私はあなたの解決策を試してみます。しかし、それは動作しません:( – Oliver

+0

謝罪、私は答えを更新しました。 –

関連する問題