2016-08-12 136 views
0

在我的查詢mysql文件中,我試圖包含我的FileDataRead模塊來讀取並獲取etablish連接的參數。如何從另一個文件中獲取方法undefined方法

我看不出有什麼我已經錯過了:(

錯誤:

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

我登錄電子模塊文件:

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會將模塊方法添加爲實例方法。我相信你想要做的是將FileDataRead中的方法作爲類方法添加到Logger模塊中。 Ruby允許你使用關鍵字extend來做到這一點。

module Logger 
    extend FileDataReader 

    # rest of the code stays the same 

end 

這樣做會使read_config_file一個類的方法在記錄器,這意味着它可以從另一個類的方法中調用。更多的信息可以在這裏找到here

+0

我試試你的解決方案。但這不工作:( – Oliver

+0

道歉,我已經更新了答案。 –

相關問題