クエリ文字列から特定のパラメータのみを削除する方法を説明します。
実装
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')
=>
(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"