如何在Rails 3中捕获并重新路由具有特定查询字符串参数的URL

时间:2012-03-30 22:45:06

标签: ruby-on-rails-3 rails-routing

我有一个名为PagesController的控制器,它曾经有一个名为contest的动作。在这个动作中,我会检查是否存在thanks参数,如果它存在则提供感谢页面。我已经将这个单一动作抽象为它自己的模型和控制器,现在我想将/contest?thanks的任何请求重定向到/contests/thanks。做这个的最好方式是什么?到目前为止,我已经在我的routes.rb文件中尝试了以下内容,但它不起作用:

# Redirect old URLs
match '/contest' => redirect("/contests")
match '/contest?thanks' => redirect("/contests/thanks")

2 个答案:

答案 0 :(得分:2)

如果你想在routes.rb中完全处理这个问题,这条路线就可以了:

match '/contest' => redirect { |params, request|
  if request.params.has_key?(:thanks)
     "/contests/thanks"
  else
     "/contests"
  end
}

答案 1 :(得分:1)

您可以从控制器重定向 -

配置/ routes.rb中:

match "/contest" => "contest#old_route"

应用程序/控制器/ contest_controller.rb:

def old_route
    if params[:thanks]
       redirect_to "/contests/thanks"
    else
       redirect_to "/contests"
    end
end

HTH