2010-01-14 64 views
26

我有這樣的路線:重定向URL根在Rails應用程序別的地方

map.namespace 'prepayments', :path_prefix => '/:locale/prepayments' do |prepayment| 
    prepayment.root :controller => 'login', :namespace => 'prepayments' 
    ... 
end 

map.redirect '/', :controller => 'prepayments/login' # this is not working 
# I tried also 
map.root :controller => 'prepayments/login' 

我想獲得的是鍵入後:www.example.com會重定向我www.example。 COM/EN /預付款。

早些時候,當我用map.root從上面的例子只是停留在www.example.com和渲染正確的觀點(但它是沒有:locale和它的工作好),後來我加了:locale我的路線,從這個時候我的看法(使用某種形式)無法正常工作。我得到錯誤,它無法找到相應的路徑 - 這是正確的,因爲我沒有通過任何:locale

那麼,如何將root重定向到另一個頁面呢?它可能會需要生成正確的路徑,並通過它通過HTTP 302 和/或如何使這樣的:

map.root :controller => 'prepayments/login', :my_locale => 'en' 

編輯: 我耙路線是這樣的:

  prepayments_root /:locale/prepayments    {:controller=>"prepayments/login", :action=>"index"} 
     prepayments_create /:locale/prepayments/send_email {:method=>:post, :controller=>"prepayments/login", :action=>"send_email"} 
     prepayments_home /:locale/prepayments/home   {:controller=>"prepayments/prepayments", :action=>"home"} 
     prepayments_save /:locale/prepayments/save   {:controller=>"prepayments/prepayments", :action=>"save"} 
     prepayments_agree /:locale/prepayments/agree   {:controller=>"prepayments/prepayments", :action=>"agree"} 
    prepayments_disagree /:locale/prepayments/disagree  {:controller=>"prepayments/login", :action=>"logout"} 
     prepayments_payment /:locale/prepayments/payment  {:controller=>"prepayments/prepayments", :action=>"payment"} 
prepayments_payment_email /:locale/prepayments/payment_email {:controller=>"prepayments/prepayments", :action=>"payment_email"} 
          /:locale/prepayments/:uid   {:controller=>"prepayments/login", :action=>"verify"} 
       redirect/        {:controller=>"prepayments/login", :action=>"index"} 

編輯:

我試圖用Garrett提出的方式來實現它,它工作。我改變路線:

map.redirect '/', :controller => 'prepayments/login', :action => 'welcome' 

,並加入控制器歡迎方法:

def welcome 
    redirect_to prepayments_root_path(:locale => 'en') 
end 

和它的作品,因爲我想(所以它在我的瀏覽器更改URL)。

另一種方式是改變這樣的路線:

map.root :controller => 'prepayments/login', :locale => 'en' 

它也可以,但它不是重定向(它不會改變瀏覽器URL)。我不確定是否有這樣的選項,如map.redirect。我在www的例子中發現它,但我也發現添加這樣的功能的插件。

感謝您的幫助!

回答

-4

您需要將控制器設置爲Welcome或什麼不是,那麼當控制器被擊中,它會重定向到你想要的路線。也許Rails 3的路由會比這個更好,但是現在,你需要一個主要的根控制器。

+0

但如何補充一點:語言環境參數redirect_to的prepayments_root_path? – klew 2010-01-14 18:29:24

+0

我知道我可以用一些字符串前加入,但有一個更好的辦法嗎? – klew 2010-01-14 18:30:17

+0

你可以給你的'rake routes'輸出嗎? – Garrett 2010-01-14 18:33:35

128

在Rails 3,你可以這樣寫:

root :to => redirect('/prepayments') 

下面的頁面有一個很好的介紹,在做Rails 3的這些重定向:http://www.railsdispatch.com/posts/rails-routing

+0

不錯!感謝幫助! – lesyk 2012-11-14 08:42:25

+4

這使用301永久重定向。你將如何做302臨時重定向? – 2013-07-21 22:09:50

+2

我想吻你! – 2013-08-22 16:04:14

34

重定向選項似乎並不爲過documented好。
在這裏你去(@derek,見最後一個例子):

重定向到一個子域當前請求的域名

root to: redirect(subdomain: 'foo', path: '/bar') # => foo.example.com/bar 

重定向從匹配的路由取代PARAMS

get 'stores/:name(*all)', to: redirect(subdomain: 'stores', path: '/%{name}%{all}') 

重定向狀態代碼(例如,302,而不是默認301)

redirect(path: '/foo', status: 302) 

重定向與條件塊

redirect(status: 302) { |params, request| 
    case request.host 
    when 'localhost' 
    '/foo' 
    when /example.com$/ 
    '/bar' 
    else 
    '/baz' 
    end 
} 
+0

謝謝,應該接受 – 2016-12-30 08:53:27

0

在導軌4(4.2.0在我的情況),I加入此:match "*path" => "main#index", :via => [:get, :post]app/config/routes.rb

要找出你應該到位的main什麼。看看這個文件:app/controllers/main_controller.rb。同樣,你可以不叫main_controller.rb,但它會something_controller.rb,大概application_controller.rbservers_controller.rb。在該文件中,你會看到一些代碼,看起來像這樣:

class MainController < ApplicationController 
    def index 
    render :layout => "angular" 
    end 
end 

哪裏有MainController,你應該能夠通過Rails提供在您的瀏覽器是什麼,從這裏做錯誤消息告訴。只是無論控制器的前綴是取代主要match "*path" => "main#index", :via => [:get, :post]

希望這是有道理的。我是一個初學者紅寶石以及

相關問題