2017-08-15 67 views
0

我在下面的get_nums方法中收到'undefined method'錯誤,我找不到原因。 list_hostnames返回一個數組,但get_nums不能對它做任何事情。有人能指點我正確的方向嗎?未定義的方法試圖匹配字符串

class Hostname 
    attr_accessor :hostname, :domain_controller_ip, :username, :password, :hosts 

    def initialize(hostname, domain_controller_ip, ad_username, ad_password) 
    @domain_controller_ip = domain_controller_ip 
    @ad_username = ad_username 
    @ad_password = ad_password 
    @hostname = hostname 
    @hosts = [] 

    def list_hostnames 
    a = Ldap.new(@domain_controller_ip, @ad_username, @ad_password) 
    hostname = @hostname + "*" 
    a.ldap_con.search(:base => a.treebase, :filter => a.filter('cn', hostname)) do |entry| 
     self.hosts.push(entry.cn[0]) 
    end 
    self.hosts.each do |x| 
     p x 
    end 
    end 

    def get_nums 
    self.hosts.each do |x| 
     i = x.match(/\d+$/) 
     p i 
    end 
end 
end 

a = Hostname.new('prod-srv-1', '192.168.1.1', 'administrator', 'password') 
b = a.list_hostnames 
b.get_nums 
end 
+0

也是你'#initialize'方法缺少一個'end' –

回答

3

看來,你已經被縮進迷惑,並沒有正確地end關閉方法。

我認爲下面的代碼是代碼的正確版本你想實現:

class Hostname 
    attr_accessor :hostname, :domain_controller_ip, :username, :password, :hosts 

    def initialize(hostname, domain_controller_ip, ad_username, ad_password) 
    @domain_controller_ip = domain_controller_ip 
    @ad_username = ad_username 
    @ad_password = ad_password 
    @hostname = hostname 
    @hosts = [] 
    end 

    def list_hostnames 
    a = Ldap.new(@domain_controller_ip, @ad_username, @ad_password) 
    hostname = @hostname + "*" 
    a.ldap_con.search(:base => a.treebase, :filter => a.filter('cn', hostname)) do |entry| 
     self.hosts.push(entry.cn[0]) 
    end 
    self.hosts.each do |x| 
     p x 
    end 

    self 
    end 

    def get_nums 
    self.hosts.each do |x| 
     i = x.match(/\d+$/) 
     p i 
    end 
    end 
end 

a = Hostname.new('prod-srv-1', '192.168.1.1', 'administrator', 'password') 
b = a.list_hostnames 
b.get_nums 
+0

感謝您解決這個問題。我完全錯過了。不幸的是我修復了它,並且仍然在get_nums上得到'未定義的方法''nomethoderror'。 – SO03112

+0

我更正了代碼。問題是'list_hostnames'返回一個數組,而不是'Hostname'的實例。 –

+1

如果你想在對象上調用'get_nums',那'list_hostnames'返回'self'從'list_hostnames'返回 –

0

既然你的attr_accessorhosts定義的,你不需要self.hosts。你可以只是做:

hosts.each do |h| 
    # code here 
end 
+0

感謝您的建議。我從我的代碼中刪除了自己,並將'end'添加到了我的初始化方法中,但它仍然爲get_nums引發同樣的'nomethoderror' – SO03112

相關問題