Ruby on rails 3 如何在Rails 3中捕获并重新路由带有特定querystring参数的url
我有一个名为Ruby on rails 3 如何在Rails 3中捕获并重新路由带有特定querystring参数的url,ruby-on-rails-3,rails-routing,Ruby On Rails 3,Rails Routing,我有一个名为PagesController的控制器,它过去有一个名为contest的动作。在此操作中,我将检查是否存在谢谢参数,如果存在,则提供一个感谢页面。此后,我将单个动作抽象为它自己的模型和控制器,现在我想将对/contest?Thank的任何请求重定向到/contests/Thank。最好的方法是什么?到目前为止,我已经在routes.rb文件中尝试了以下方法,但不起作用: # Redirect old URLs match '/contest' => redirect("/con
PagesController
的控制器,它过去有一个名为contest
的动作。在此操作中,我将检查是否存在谢谢参数,如果存在,则提供一个感谢页面。此后,我将单个动作抽象为它自己的模型和控制器,现在我想将对/contest?Thank
的任何请求重定向到/contests/Thank
。最好的方法是什么?到目前为止,我已经在routes.rb文件中尝试了以下方法,但不起作用:
# Redirect old URLs
match '/contest' => redirect("/contests")
match '/contest?thanks' => redirect("/contests/thanks")
您可以从控制器重定向-
config/routes.rb:
match "/contest" => "contest#old_route"
app/controllers/contest_controller.rb:
def old_route
if params[:thanks]
redirect_to "/contests/thanks"
else
redirect_to "/contests"
end
end
HTH如果您想在routes.rb中完全处理此问题,此路线将起作用:
match '/contest' => redirect { |params, request|
if request.params.has_key?(:thanks)
"/contests/thanks"
else
"/contests"
end
}
我们有一些第三方资源已经配置为将竞赛表单提交重定向到/contest?谢谢。事后诸葛亮:从routes.rb重定向是否重要?你不能从控制器重定向吗?我会同意的,只要我能在某个地方捕捉到它,这个解决方案刚刚救了我的命(和许多小时的头发拉扯)!德克萨斯州!