2013-08-28 93 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