Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/powerbi/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 3 如何在Rails 3中捕获并重新路由带有特定querystring参数的url_Ruby On Rails 3_Rails Routing - Fatal编程技术网

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重定向是否重要?你不能从控制器重定向吗?我会同意的,只要我能在某个地方捕捉到它,这个解决方案刚刚救了我的命(和许多小时的头发拉扯)!德克萨斯州!