2016-08-12 82 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

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

相关问题