重定向路由:back - rails

时间:2013-08-28 19:29:44

标签: ruby-on-rails ruby redirect

我在路线文件中有这个

match "/:url" => redirect_to :back, constraints: { url: /^keys.*/ }

但是我收到此消息错误

routes.rb:132: syntax error, unexpected tSYMBEG, expecting keyword_do or '{' or '(' (SyntaxError)
  match "/:url" => redirect_to :back, constraints: { url: /^keys.*/ }
                                ^

我哪里出错了?

2 个答案:

答案 0 :(得分:1)

routes.rb与您的应用程序状态无关,这意味着它无权访问引用页面。您不会像在控制器中那样简单地调用redirect_to :back

也就是说,您可以在控制器中实现精确的代码。例如,您想要重定向/keys.*/上的任何请求,这些请求由keys_controller.rb控制:

# app/controllers/keys_controller.rb
class KeysController < ApplicationController 
    before_filter :redirect

    private

    def redirect
        redirect_to :back
    end
end

这将捕获KeysController上任何操作的任何请求并重定向到引用页面。

<强>更新

要重定向到您定义的根目录(假设您已明确定义了一个),只需将重定向指向应用程序根目录:

match "/:url", to: redirect('/'), constraints: { url: /keys.*/ }

答案 1 :(得分:1)

这是暧昧的,拯救的括号!

match "/:url" => redirect_to(:back), constraints: { url: /^keys.*/ }

<强>更新

关于没有redirect_to,请尝试:

match "/:url" => redirect{|params, request| request.env["HTTP_REFERER"]}, constraints: { url: /^keys.*/ }

我没有测试过代码,所以如果出现问题,请告诉我。