代码之家  ›  专栏  ›  技术社区  ›  christo16

红宝石Net:LDAP-NoMethodError对于不存在的属性

  •  1
  • christo16  · 技术社区  · 14 年前

    我在做一个简单的Net:LDAP搜索当我输出一个条目的属性时,可能不是每个条目都存在,我得到一个错误“NoMethodError:undefined method'some\u attribute”

    require 'rubygems'
    require 'net/ldap'
    
    ldap = Net::LDAP.new
    ldap.host = 'ldap.example.com'
    ldap.port = 389
    if ldap.bind
      filter = Net::LDAP::Filter.eq( "sn", "Smith" )
      treebase = "ou=people,o=company"
      ldap.search( :base => treebase, :filter => filter, :return_result => false) do |entry|
        puts #{entry.some_attribute}
      end
    end
    else
      puts "bind unsuccessful"
    end
    

    我还试着做:

    if entry.respond_to?(some_attribute)
      puts "#{entry.some_attribute}"
    end
    

    1 回复  |  直到 14 年前
        1
  •  1
  •   Jed Schneider    14 年前

    Ruby在 respond_to? 方法调用。

    ruby-1.8.7-p299 > class Foo
    ruby-1.8.7-p299 ?>  attr_accessor :some_attr
    ruby-1.8.7-p299 ?>  end
     => nil 
    ruby-1.8.7-p299 > Foo.new.respond_to?(some_attr)
    NameError: undefined local variable or method `some_attr' for #<Object:0xb77ce950>
        from (irb):4
    ruby-1.8.7-p299 > Foo.new.respond_to?(:some_attr)
     => true