2012-05-01 2 views
1

어떻게 다차원으로 만들 수 있습니까? 각 검색 결과 항목에는 복수의 속성 :attributes => ['sAMAccountName','givenName','SN','mail']이 있습니다. 결과에는 많은 항목이있을 수 있습니다. 이 코드는 여러 속성이있는 항목을 하나만 만들 때 유용합니다.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"=>"someone2[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] 
+0

conn.search 호출의 결과와 예제를 얻기 원하는 형식으로 첨부해야합니다. –

+0

위의 예가 원하는 것입니까? –

+0

@PaulChechetin - Hey Paul, 내 질문을 업데이트했습니다. –

답변

0

나는이 질문을 이해할 수 있을지 확신하지 못한다. 결과의 형태로 원하는

  • 해시의

    • conn.search 반환 배열 :

      [ 
           {"uid":"123","displayName":"User 123","mail":"[email protected]"}, 
           {"uid":"456","displayName":"User 456","mail":"[email protected]"}, 
           {"uid":"789","displayName":"User 789","mail":"[email protected]"} 
      ] 
      
    • 내가 Array.map 생각

      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 
            conn.search(:base => LDAPBASE, 
               :filter => Net::LDAP::Filter.eq(attribute, loginID+"*"), 
               :attributes => ['sAMAccountName','givenName','SN','mail'], 
               :return_result => true 
              ).reduce(Array.new) do |acc, el| 
      
               # 
               # Any modification of the entry must be here 
               # 
      
               acc + [el] 
      
               end 
            end 
           end 
      end 
      

      은 좋은 선택을 너무

      내 가정이다

  • +0

    귀하의 게시물의 예상 결과가 수정되었습니다. 기본적으로 속성과 값이있는 배열이 포함 된 해시 참조 배열이 필요합니다. –

    +0

    당신은 속성과 값이 들어있는 해쉬 배열을 원한다고 생각합니다. 맞아? –

    +0

    아직 설명이 필요하다고 생각합니다. 필요한 것은 conn.search' 호출의 결과는 속성과 값이있는 배열을 포함하는 배열입니다. 그리고 다른 무엇을 원하니? –

    관련 문제