我尝试使用ActiveLdap搜索具有特定属性值的用户,但它正在向服务器发送一些奇怪的查询。我把它设置成这样:
class Ldapuser < ActiveLdap::Base
ldap_mapping :dn_attribute => 'uid',
:prefix => 'ou=People',
:classes => ['top', 'inetOrgPerson']
end
然后尝试找到具有特定专业的学生:
Ldapuser.all(
:attribute => 'studentMajor', :value => 'CHEM',
:attribute => 'primaryAffiliation', :value => 'student',
:attribute => 'organizationalStatus', :value => 'active').each {|user|
# process the user...
}
当我运行它时,它永远不会到达处理用户的内部块,我必须杀死该程序。 Tcpdump显示了三次执行的搜索:
我的期望是它可以执行单个查询并快速获得大约20个结果,这是我从命令行使用ldapsearch时得到的结果:
ldapsearch -x '(&(studentMajor=CHEM)(primaryAffiliation=student)
(organizationalStatus=active))'
答案 0 :(得分:1)
从文档中看不出多个属性名称 - 值对被.all()识别,它是find(:all,...)的同义词,并且您看到的行为已经同意。它似乎只搜索第一对,或者可能是任何一对:因此搜索时间很长。您需要使用:filter选项,我可以快速收集。