2017-08-15 11 views
0

以下のget_numsメソッドで「未定義のメソッド」エラーが発生しました。 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

感謝が不足しています。自分のコードから自分自身を削除し、initializeメソッドに 'end'を追加しましたが、get_numsと同じ 'nomethoderror'がスローされます – SO03112

関連する問題