これを多次元にするにはどうすればよいですか?各検索結果エントリには複数の属性:attributes => ['sAMAccountName','givenName','SN','mail']
があります。結果には多くのエントリが存在する可能性があります。このコードは、複数の属性を持つエントリを1つだけ作成するのに適しています。Ruby - 多次元ハッシュ
def self.Find(attribute, loginID)
conn = Net::LDAP.new :host => SERVER,
:port => PORT,
:base => BASE,
:auth => {
:username => 'admin',
:password => 'admin',
:method => :simple
}
if conn.bind
result = HashWithIndifferentAccess.new
conn.search(:base => LDAPBASE,
:filter => Net::LDAP::Filter.eq(attribute, loginID+"*"),
:attributes => ['sAMAccountName','givenName','SN','mail'],
:return_result => true
).each do |entries|
entries.each do |attribute, values|
values.each do |value|
result[attribute] = value
end
end
end
result
end
end
私はLDAPから取得する実際の応答は、このようなものです -
puts result.to_s
{
"dn"=>"CN=somename\\, somefirstname,OU=Users,DC=site,DC=com",
"sn"=>"somename",
"givenname"=>"somefirstname",
"samaccountname"=>"someuserid",
"mail"=>"[email protected]"
}
検索があるので
は*一致するすべてのエントリを検索するために、ワイルドカードを持っています。 Ldapは上記の形式で複数のエントリを返します。これと類似しています -{
"dn"=>"CN=somename\\, somefirstname1,OU=Users,DC=site,DC=com",
"sn"=>"somename1",
"givenname"=>"somefirstname1",
"samaccountname"=>"someuserid1",
"mail"=>"[email protected]"
},
{
"dn"=>"CN=somename\\, somefirstname2,OU=Users,DC=site,DC=com",
"sn"=>"somename2",
"givenname"=>"somefirstname2",
"samaccountname"=>"someuserid2",
"mail"=>"[email protected]"
},
{
"dn"=>"CN=somename\\, somefirstname3,OU=Users,DC=site,DC=com",
"sn"=>"somename3",
"givenname"=>"somefirstname3",
"samaccountname"=>"someuserid3",
"mail"=>"[email protected]"
},
A[a=>1,b=>11,c=>111]
B[a=>2,b=>22,c=>222]
C[a=>3,b=>33,c=>333]
D[a=>4,b=>44,c=>444]
取得したい形式でconn.search呼び出しの結果と例を添付する必要があります。 –
上記の例が必要ですか? –
@PaulChechetin - Hey Paul、私は私の質問を更新しました。 –