如何在routes.rb中进行重定向传递查询字符串

bra*_*rad 14 redirect routes ruby-on-rails-3

我的routes.rb中有一个正常运行的重定向;

match "/invoices" => redirect("/dashboard")
Run Code Online (Sandbox Code Playgroud)

我现在想要为此添加一个查询字符串,例如,

/invoices?show=overdue
Run Code Online (Sandbox Code Playgroud)

将被重定向到

/dashboard?show=overdue
Run Code Online (Sandbox Code Playgroud)

我尝试过几件事.我最接近的是;

match "/invoices?:string" => redirect("/dashboard?%{string}")
Run Code Online (Sandbox Code Playgroud)

这给了我正确的输出,但原始URL仍然显示在浏览器中.

我敢肯定我错过了一些非常简单的东西,但我看不清楚.

Mik*_*iet 16

在这种情况下,您可以使用请求对象:

match "/invoices" => redirect{ |p, request| "/dashboard?#{request.query_string}" }
Run Code Online (Sandbox Code Playgroud)

  • 感谢答主。另请注意,从 SEO 角度来看,此代码并不好,因为如果 query_string 为空,则 url 将看起来像“...?” (2认同)

Urk*_*kle 9

最简单的方法(至少在Rails 4中)是使用选项模式进行重定向调用.

get '/invoices' => redirect(path: '/dashboard')
Run Code Online (Sandbox Code Playgroud)

这将仅更改路径组件并保留查询参数.

  • @the_minted 实际上您只需使用 %{id} 即可。例如`get '/invoices/:id' => redirect(path: '/new_invoices/%{id}')` (2认同)