2015-10-21 11 views
5

ハッシュを渡してクエリ引数を使用してURIオブジェクトを構築する方法は?Rubyでハッシュからクエリ引数を使用してURIを構築する方法

私は、クエリを生成することができます:私は多くの引数にクエリ文字列を構築することは維持するために読めないと難しいだろうと思うしかし

https://example.com?a=argument1&b=argument2

を生成

URI::HTTPS.build(host: 'example.com', query: "a=#{hash[:a]}, b=#{[hash:b]}")

。私は、ハッシュを渡すことによってクエリ文字列を構築したいと思います。例では以下のように:

hash = { 
    a: 'argument1', 
    b: 'argument2' 
    #... dozen more arguments 
} 
URI::HTTPS.build(host: 'example.com', query: hash) 

NoMethodError: undefined method `to_str' for {:a=>"argument1", :b=>"argument2"}:Hash 

を発生させていることは、URIのAPIを使用して、ハッシュに基づいてクエリ文字列を構築することは可能ですか?私はサルパッチハッシュオブジェクトにしたくない...

答えて

8

ハッシュで'#to_query'と呼ぶだけです。

hash = { 
    a: 'argument1', 
    b: 'argument2' 
    #... dozen more arguments 
} 
URI::HTTPS.build(host: 'example.com', query: hash.to_query) 

=> https://example.com?a=argument1&b=argument2

あなたはレールはレールやアクティブサポートを使用していない方のためにrequire 'uri'

+7

'to_queryです'はRailsのみのメソッドです。 Rubyには存在しません。 –

+1

@marc_ferna質問にはruby on railsタグがあります。以下を含めることができます:非レールプロジェクトにActiveSupport –

1

に覚えて使用していない場合は、Rubyの標準ライブラリを使用したソリューションは、

hash = { 
    a: 'argument1', 
    b: 'argument2' 
} 
URI::HTTPS.build(host: 'example.com', query: URI.encode_www_form(hash)) 
=> #<URI::HTTPS https://example.com?a=argument1&b=argument2> 
関連する問題