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