2014-02-24 3 views
2

쿼리 문자열에서 해시를 만들고 싶습니다.루비의 쿼리 문자열에서 해시를 만드는 방법은 무엇입니까?

def qs2h(querystring) 
    hashes = querystring.split('&').inject({}) do |result,query| 
    k,v = query.split('=') 
    if !v.nil? 
     result.merge(k.to_sym => v) 
    elsif !result.key?(k) 
     result.merge(k.to_sym => true) 
    else 
     result 
    end 
    end 
    hashes 
end 

qs2h('a=1&b=2&c=3&d') #=> {:a => "1", :b => "2", :c => "3", :d => true} 

루비에서이 작업을 수행 할 수있는 간단한 방법이 있나요 : 이것은 내 방법?

+0

내가이 옵션에 보일 것이다 http://stackoverflow.com/questions/2772778/parse-string-as-if-it-were- 루비 온 레일 –

+0

또한 사용하지 않는 경우 : – mdesantis

+0

키를 상징화하지 말 것을 제안합니다. DoS 공격에 대한 문을 열 수 있습니다. 레일스가'HashWithIndifferentAccess'를 만들었습니다. 나는'activesupport'를 요구하고'HashWithIndifferentAccess'를 사용합니다. – mdesantis

답변

7

사용 CGI::parse : 당신이 레일을 사용하는 경우

CGI.parse('a=1&b=2&c=3&d') 
# => {"a"=>["1"], "b"=>["2"], "c"=>["3"], "d"=>[]} 
Hash[CGI.parse('a=1&b=2&c=3&d').map {|key,values| [key.to_sym, values[0]||true]}] 
# => {:a=>"1", :b=>"2", :c=>"3", :d=>true} 
+0

이것이 내가 기대 한 것입니다! 감사! – bprayudha

관련 문제