我正在使用Net :: LDAP的搜索,返回的条目是这样的.
#<Net::LDAP::Entry:0x7f47a6491c00
@myhash=
{:loginshell=>["/bin/bash"],
:cn=>["M... R..."],
:homedirectory=>["/mnt/home/m..."],
:uid=>["m..."],
:userpassword=>["{CRYPT}$1$3zR/C...$R1"],
...
}>
Run Code Online (Sandbox Code Playgroud)
我试着做以下事情,但失败了.
(1)
e = entry.to_hash
e.has_key? "uid"
Run Code Online (Sandbox Code Playgroud)
(2)
entry.has_key? "uid"
Run Code Online (Sandbox Code Playgroud)
第一个错误说"to_hash"未定义,第二个"has_key"未定义.然后我真的不知道怎么做,基本上我想找到"uid"是否存在,如果是这样的话得到它的对应值.
非常感谢你的提示.
顺便说一句,它只响应"entry.uid",但如果搜索键是以字符串形式提供的,那该怎么办呢?例如,
def get_value(key)
if entry has key
return key's value
end
end
Run Code Online (Sandbox Code Playgroud)
sca*_*guy 27
:uid是一个Symbol.那不是String.
试试这个:
e.has_key? :uid
Run Code Online (Sandbox Code Playgroud)
键“uid”不存在。尝试
e = Entry.new.myhash
e.has_key?(:uid)
Run Code Online (Sandbox Code Playgroud)
那应该返回true。如果这给您带来错误,则问题可能出在您的班级中。确保在 initialize 方法中定义了 myhash,并且您使用 getter 方法(或 attr_reader)能够访问该变量。你可以用
attr_reader :myhash
Run Code Online (Sandbox Code Playgroud)
就在 initialize 方法之前。