行動すれば次の現実

ほどよくモダンなシステム開発を目指しています。メインテーマは生産性、Ruby、Javascriptです。

クエリ文字列から特定のパラメータを削除したい | Ruby On Rails

クエリ文字列から特定のパラメータのみを削除したいことがあったのでメモ。

実装

uri = URI.parse('https://www.example.com?hoge=1&fuga=2&piyo=3')
query = Rack::Utils.parse_nested_query(uri.query)
query.delete('fuga')
uri.query = query.to_param
uri.to_s

説明

(1) URL文字列をURIオブジェクトに変換します。

uri = URI.parse('https://www.example.com?hoge=1&fuga=2&piyo=3')
=> #<URI::HTTPS https://www.example.com?hoge=1&fuga=2&piyo=3>

(2) Rack::Utilsを使用してクエリ文字列をHashにします。

query = Rack::Utils.parse_nested_query(uri.query)
=> {"hoge"=>"1", "fuga"=>"2", "piyo"=>"3"}

(3) deleteメソッドで特定のパラメータを削除します。

query.delete('fuga')
=> "2"

(4) URIオブジェクトに新しいクエリパラメータをセットします。

uri.query = query.to_param
=> "hoge=1&piyo=3"

(5) to_sでURLを取得します。

uri.to_s
=> "https://www.example.com?hoge=1&piyo=3"