복붙노트

[RUBY-ON-RAILS] 이 레일에 루비의 쿼리 문자열 인 것처럼 문자열을 구문 분석

RUBY-ON-RAILS

이 레일에 루비의 쿼리 문자열 인 것처럼 문자열을 구문 분석

나는이 같은 문자열을 가지고 :

"foo=bar&bar=foo&hello=hi"

레일합니까 루비는이 쿼리 문자열 인 것처럼 나는이 같은 해시를 얻을 수 있도록,이 구문을 분석하는 방법을 제공합니다 :

{
    :foo => "bar",
    :bar => "foo",
    :hello => "hi"
}

아니면 내가 나 자신은 그것을 작성해야합니다?

문자열이 위의 URL에서 실제 쿼리 문자열하지만, ​​페이스 북 연결에서 쿠키에 저장하지 않고 문자열이 아닌 것을 바랍니다 참고.

해결법

  1. ==============================

    1.대답은 당신이 사용하고 있는지 레일의 버전에 따라 달라집니다. 당신은 2.3 이상, PARAMS에 대한 사용 랙의 내장 파서를 사용하는 경우

    대답은 당신이 사용하고 있는지 레일의 버전에 따라 달라집니다. 당신은 2.3 이상, PARAMS에 대한 사용 랙의 내장 파서를 사용하는 경우

     Rack::Utils.parse_nested_query("a=2") #=> {"a" => "2"}
    

    나이가 레일에있는 경우, 당신은 참으로 CGI :: 구문 분석을 사용할 수 있습니다. 주 당신이 당신이 얻고있는 데이터가 선택한 방법에 맞는지 여부를 확인해야하므로 모듈 간의 미묘한 방식으로 해시와 배열 다릅니다의 취급.

    또한 랙 포함 할 수있다 ::의 Utils를 속기 액세스 할 수 있도록 클래스로.

  2. ==============================

    2.그만큼

    그만큼

    CGI::parse("foo=bar&bar=foo&hello=hi")
    

    당신을 제공합니다

    {"foo"=>["bar"], "hello"=>["hi"], "bar"=>["foo"]}
    
  3. ==============================

    3.편집 : 코멘트에 말했듯이, symolizing 키 누군가 당신을 다치게하려는 경우 아래 서버를 가져올 수 있습니다. 그와 함께 작업에 쉽게 물건을 만들기 때문에 나는 로우 프로파일 애플리케이션에서 작업 할 때 나는 아직도 그것을 많이 할하지만 높은 지분 애플 리케이션을 위해 더 이상하지 않을 것이다

    편집 : 코멘트에 말했듯이, symolizing 키 누군가 당신을 다치게하려는 경우 아래 서버를 가져올 수 있습니다. 그와 함께 작업에 쉽게 물건을 만들기 때문에 나는 로우 프로파일 애플리케이션에서 작업 할 때 나는 아직도 그것을 많이 할하지만 높은 지분 애플 리케이션을 위해 더 이상하지 않을 것이다

    당신이 원하는 결과를 얻기위한 열쇠를 상징하는 것을 잊지 마세요

    Rack::Utils.parse_nested_query("a=2&b=tralalala").deep_symbolize_keys
    

    이 동작은 중복 파괴적이다.

  4. ==============================

    4.당신이 URL에 대한 이야기 ​​경우이 매개 변수 그들에 대한 데이터를 얻을하는 데 사용되는

    당신이 URL에 대한 이야기 ​​경우이 매개 변수 그들에 대한 데이터를 얻을하는 데 사용되는

    > request.url
    => "http://localhost:3000/restaurants/lokesh-dhaba?data=some&more=thisIsMore"
    

    그런 다음 쿼리 매개 변수를 얻을 수 있습니다. 사용하다

    > request.query_parameters
    => {"data"=>"some", "more"=>"thisIsMore"}
    
  5. ==============================

    5.당신이 해시를 원하는 경우에 당신은 사용할 수 있습니다

    당신이 해시를 원하는 경우에 당신은 사용할 수 있습니다

    Hash[CGI::parse(x).map{|k,v| [k, v.first]}]
    
  6. from https://stackoverflow.com/questions/2772778/parse-a-string-as-if-it-were-a-querystring-in-ruby-on-rails by cc-by-sa and MIT license