2013-08-28 110 views
0

我有这个在我的路线文件重定向路由:回来 - 轨道

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.*/ } 
           ^

我有什么错?

+0

你想在这里做什么?据我所知,没有办法在'routes.rb'中重定向到referrer。 – zeantsoi

+0

@zeantsoi是的,这正是我想要遵循的文档:http://api.rubyonrails.org/classes/ActionController/Redirecting.html#method-i-redirect_to – user1611830

+0

'redirect_to'是'ActionController'上的类方法。它在'routes.rb'中不起作用。我在下面提供了一个解释/解决方案。 – zeantsoi

回答

2

这是模糊的,括号中拯救!

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

更新

关于以没有redirect_to,尝试:

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

我没有测试的代码,所以让我知道如果事情是错的。

+0

我收到这条消息undefined method'redirect_to' – user1611830

+0

请参阅:http://guides.rubyonrails.org/routing.html#redirection – dombesz

+0

'redirect_to'不是'routes.rb'中的一种方法。这是'ApplicationController'上的类方法。这段代码明确地说__不是___工作。 – zeantsoi

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上的任何行动请求,并重定向到引用页。

UPDATE

要重定向到您定义的根目录(假设你已经明确定义之一),简单点重新导向到应用程序根目录:

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

好吧我知道我可以做到这一点,但我觉得从路由文件重定向更自然。我在文档中读到,我可以像'get'/ stories'这样做:重定向('/ posts')'。我想要那个,但是要么重定向到根页面,要么重定向到后面的页面。可能吗 ? – user1611830

+0

这是不可能的。同样,'routes.rb'在MVC框架中扮演着独特的角色,它在运行时不知道应用程序的状态。正如我在上面演示的那样,重定向回引用程序的正确方法在控制器中。 – zeantsoi

+0

谢谢。所以我把这个'匹配'/:url':重定向('/ profiles'),约束:{url:/keys.*/}'并且它工作正常,我怎样才能重定向到'root'? – user1611830