uri = URI.parse(request.url)
new_query = uri.query.split("&").reject{|pair|
k,v = pair.split("=")
k =~ /^foo\[?/ # reject params named "foo" or "foo[anything"
}.join("&")
# if the new querystring is empty, assign nil instead of "" so we don't
# end up with a solitary question mark at the end of the url.
uri.query = (new_query.empty? ? nil : new_query)
redirect_to uri.to_s
在尝试以“Rails 方式”做事时遇到一些不明显的问题后,我来到了上述解决方案,如果有这样的方式来解决这个问题。例如:
- Rails 参数解析将自动为使用特殊方括号语法的查询参数实例化数组和散列:
?x[a]=1&y[]=2
becoming{"x"=>{"a"=>"1"}, "y"=>["2"]}
等等,因此使用提供的查询字符串和参数例程的代码在这方面很难处理。因此,通过原始字符串值过滤参数可能很困难。即使是非 rails/rack CGI 模块也会为您提供数组而不是参数值的字符串。
- rails
params
散列包括 GET、POST 和路由参数,例如:action
和,:controller
因此无论如何您都不能只是重用它来重建查询字符串。
- 因此,像 url_for 这样的 URL 助手并没有多大帮助。
考虑到这些问题,我发现我无法使用提供的框架功能来获取一个纯粹且不受干扰的查询字符串,从当前请求中按原样复制,这只是简单地删除了一个参数。然而,上面的代码似乎运行良好。